JavaScript的數(shù)據(jù)類型

最近在學(xué)習(xí)JS的數(shù)據(jù)類型的相關(guān)內(nèi)容而线,在此就做一些相關(guān)的學(xué)習(xí)筆記。

一葛作、概述

JS的數(shù)據(jù)類型總共有7種。

1.number(數(shù)值)猖凛,2.string(字符串)赂蠢,3.Boolean(布爾值),4.symbol(符號(hào))辨泳,5.null虱岂,6.undefined,7.object(對(duì)象)菠红。其中symbol是ES6新增的第岖,本次記錄并不算在內(nèi)。

數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)

字符串(string):文本(比如Hello World)试溯。

布爾值(boolean):表示真?zhèn)蔚膬蓚€(gè)特殊值蔑滓,即true(真)和false(假)

undefined:表示“未定義”或不存在,即由于目前沒有定義遇绞,所以此處暫時(shí)沒有任何值

null:表示空值键袱,即此處的值為空。

對(duì)象(object):各種值組成的集合摹闽。

二蹄咖、數(shù)值(number)

JavaScript存儲(chǔ)數(shù)字的時(shí)候都是以64位浮點(diǎn)數(shù)形式進(jìn)行的,整數(shù)也是一樣的付鹿,1和1.0是同一個(gè)數(shù)澜汤。JavaScript提供的有效數(shù)字最長(zhǎng)為53個(gè)二進(jìn)制位,這就說明精度最多只能到53個(gè)二進(jìn)制位舵匾,即在-2^53到2^53之間的數(shù)都可以精確表示俊抵。

JavaScript 對(duì)整數(shù)提供四種進(jìn)制的表示方法:十進(jìn)制、十六進(jìn)制纽匙、八進(jìn)制务蝠、二進(jìn)制。

在JavaScript中各種進(jìn)制的表現(xiàn)形式如下

十進(jìn)制:沒有前導(dǎo)0的數(shù)值烛缔。

八進(jìn)制:有前綴0o或0O的數(shù)值馏段,或者有前導(dǎo)0、且只用到0-7的八個(gè)阿拉伯?dāng)?shù)字的數(shù)值践瓷。

十六進(jìn)制:有前綴0x或0X的數(shù)值院喜。

二進(jìn)制:有前綴0b或0B的數(shù)值。

在默認(rèn)的情況下JavaScript會(huì)將十六進(jìn)制晕翠、八進(jìn)制喷舀、二進(jìn)制轉(zhuǎn)換為十進(jìn)制砍濒。比如:

0xff ——>255,0o377 ——>255硫麻,0b11——>3

parseInt方法用于將字符串轉(zhuǎn)換為整數(shù)爸邢。parseInt('123')——> 123,如果字符串頭部有空格拿愧,空格會(huì)被自動(dòng)去除杠河,如果parseInt的參數(shù)不是字符串,則會(huì)先轉(zhuǎn)為字符串在轉(zhuǎn)換浇辜,字符串為整數(shù)的時(shí)候券敌,是一個(gè)個(gè)字符依次轉(zhuǎn)換,如果遇到不能轉(zhuǎn)為數(shù)字的字符柳洋,就不在進(jìn)行下去待诅,返回已經(jīng)轉(zhuǎn)好的部分,如果字符串的第一個(gè)字符不能轉(zhuǎn)化為數(shù)字熊镣,返回NaN卑雁。

JavaScript中可以進(jìn)行進(jìn)制的轉(zhuǎn)換,parseInt(‘1000’轧钓,2)——>8;parseInt(‘1000’序厉,6)——>216;parseInt(‘1000’锐膜,8)——>512毕箍;這三個(gè)例子分別表示的是二進(jìn)制、六進(jìn)制道盏、八進(jìn)制的1000而柑,分別等于十進(jìn)制的8、216荷逞、512媒咳。

parseFloat方法用于將一個(gè)字符串轉(zhuǎn)為浮點(diǎn)數(shù),isNaN方法可以用來判斷一個(gè)值是否為NaN种远,isFinite方法返回一個(gè)布爾值涩澡,表示某個(gè)值是否為正常的數(shù)值。

三坠敷、字符串

字符串就是零個(gè)或多個(gè)排在一起的字符妙同,放在單引號(hào)或雙引號(hào)之中。

單引號(hào)字符串的內(nèi)部膝迎,可以使用雙引號(hào)粥帚。雙引號(hào)字符串的內(nèi)部,可以使用單引號(hào)限次。如果想在實(shí)現(xiàn)在單引號(hào)中加入單引號(hào)芒涡,或者在雙引號(hào)中引入雙引號(hào),可以使用轉(zhuǎn)義符,比如'It\'s a secret'或者"she say \"Hello\""费尽。多行字符串的顯示方法有3種:

1.在需要換行的地方添加 \

var s=’123456\

???????? ? 7890’

在 \ 后面不能有空格赠群。

2.在需要斷行的地方使用 + (推薦使用)

var s2=’12345’+

???????? ?? ‘67890’

在+后面可以有空格。

方法3:使用反引號(hào)旱幼,數(shù)字鍵1左邊的那個(gè)鍵

var s3=`12345

???????? ???????? 6789`

在換行之后乎串,5和6之間會(huì)存在換行和空格。

反斜杠(\)在字符串內(nèi)有特殊含義速警,用來表示一些特殊字符叹誉,所以又稱為轉(zhuǎn)義符。需要用反斜杠轉(zhuǎn)義的特殊字符闷旧,主要有下面這些长豁。

\0?:null(\u0000)

\b?:后退鍵(\u0008)

\f?:換頁符(\u000C)

\n?:換行符(\u000A)

\r?:回車鍵(\u000D)

\t?:制表符(\u0009)

\v?:垂直制表符(\u000B)

\'?:?jiǎn)我?hào)(\u0027)

\"?:雙引號(hào)(\u0022)

\\?:反斜杠(\u005C)

字符串可以被視為字符數(shù)組,因此可以使用數(shù)組的方括號(hào)運(yùn)算符忙灼,用來返回某個(gè)位置的字符(位置編號(hào)從0開始)匠襟。但是卻無法改變字符串之中的單個(gè)字符,length屬性返回字符串的長(zhǎng)度该园,該屬性也是無法改變的酸舍。

JavaScript 不僅以 Unicode 儲(chǔ)存字符,還允許直接在程序中使用 Unicode 碼點(diǎn)表示字符里初,即將字符寫成\uxxxx的形式啃勉,其中xxxx代表該字符的 Unicode 碼點(diǎn)。\u00A9代表版權(quán)符號(hào)双妨。

有時(shí)淮阐,文本里面包含一些不可打印的符號(hào),比如 ASCII 碼0到31的符號(hào)都無法打印出來刁品,這時(shí)可以使用 Base64 編碼泣特,將它們轉(zhuǎn)成可以打印的字符。所謂 Base64 就是一種編碼方法挑随,可以將任意值轉(zhuǎn)成 0~9状您、A~Z、a-z兜挨、+和/這64個(gè)字符組成的可打印字符膏孟。使用它的主要目的,不是為了加密暑劝,而是為了不出現(xiàn)特殊字符骆莹,簡(jiǎn)化程序的處理。

btoa():任意值轉(zhuǎn)為 Base64 編碼

atob():Base64 編碼轉(zhuǎn)為原來的值

要將非 ASCII 碼字符轉(zhuǎn)為 Base64 編碼担猛,必須中間插入一個(gè)轉(zhuǎn)碼環(huán)節(jié)幕垦,再使用這兩個(gè)方法丢氢。

functionb64Encode(str){

????returnbtoa(encodeURIComponent(str));

}

functionb64Decode(str){

returndecodeURIComponent(atob(str));

}

b64Encode('你好')// "JUU0JUJEJUEwJUU1JUE1JUJE"

b64Decode('JUU0JUJEJUEwJUU1JUE1JUJE')// "你好"

四、布爾值

布爾值代表“真”和“假”兩個(gè)狀態(tài)先改【尾欤“真”用關(guān)鍵字true表示,“假”用關(guān)鍵字false表示仇奶。布爾值只有這兩個(gè)值貌嫡。

兩元邏輯運(yùn)算符:?&&?(And),||?(Or)

前置邏輯運(yùn)算符:?!?(Not)

相等運(yùn)算符:===该溯,!==岛抄,==,!=

比較運(yùn)算符:>狈茉,>=夫椭,<,<=

如果 JavaScript 預(yù)期某個(gè)位置應(yīng)該是布爾值氯庆,會(huì)將該位置上現(xiàn)有的值自動(dòng)轉(zhuǎn)為布爾值蹭秋。轉(zhuǎn)換規(guī)則是除了下面六個(gè)值被轉(zhuǎn)為false,其他值都視為true堤撵。

undefined

null

false

0

NaN

""或''(空字符串)

五仁讨、null和undefined

null和undefined都表示沒有,但是為什么有兩個(gè)量表示沒有值的情況呢实昨?這是因?yàn)樵贘S語言中設(shè)計(jì)的時(shí)候沒有設(shè)計(jì)好(這是JS的一段黑歷史)

兩者的主要區(qū)別是:

對(duì)于一個(gè)沒有賦值的對(duì)象(object)就用null表示洞豁;

對(duì)于一個(gè)沒有賦值的非對(duì)象數(shù)據(jù)就用undefined表示;

以上的數(shù)據(jù)類型可以歸為基本數(shù)據(jù)類型(簡(jiǎn)單數(shù)據(jù)類型)

六屠橄、對(duì)象(object)

對(duì)象(object)是復(fù)雜的數(shù)據(jù)類型族跛,而復(fù)雜數(shù)據(jù)類型就是簡(jiǎn)單數(shù)據(jù)類型的組合闰挡。

什么是對(duì)象锐墙?簡(jiǎn)單說,對(duì)象就是一組“鍵值對(duì)”(key-value)的集合长酗,是一種無序的復(fù)合數(shù)據(jù)集合溪北。對(duì)象是通過哈希表來建立的,對(duì)象的所有鍵名都是字符串(ES6 又引入了 Symbol 值也可以作為鍵名)夺脾,而對(duì)象中的value值可以是字符串之拨,數(shù)字,布爾值咧叭,undefined和null蚀乔,以及對(duì)象,比如

var person= {

???????? key:value,

???????? name:‘張三’,??

???????? age:18,

???????? married:true,

????????xiaosan:undefined,

????????children: {name:’xxx’,age:1}

}

每一個(gè)鍵值對(duì)與下一個(gè)鍵值對(duì)之間需要添加一個(gè)逗號(hào)菲茬,最后一個(gè)鍵值對(duì)后面可以不需要添加逗號(hào)吉挣。

對(duì)象引用的時(shí)候可以有如下形式:

person[‘name’],(對(duì))

person.name,(對(duì))

person[name],(錯(cuò))

key在調(diào)用的時(shí)候是字符串派撕,就不能直接是調(diào)用,key可以是空字符串但是需要加上單引號(hào)或者雙引號(hào)

加上單引號(hào)或者雙引號(hào)的object功能更加強(qiáng)大睬魂。比如9a:’frank’會(huì)報(bào)錯(cuò)终吼,而‘9a’:’frank’就不會(huì)報(bào)錯(cuò),鍵名的取名是需要滿足標(biāo)識(shí)符的規(guī)則氯哮,此時(shí)調(diào)用的時(shí)候可以使用person.name际跪。但是一般情況下都是不加引號(hào),加引號(hào)在編寫代碼的時(shí)候是比較麻煩的喉钢,所以大家在編寫代碼的時(shí)候一般都不加引號(hào)姆打,而是選擇規(guī)范的命名。

如何打印出一個(gè)哈希表中的key和value

var person = {

name: ‘frank’,

age:18

}

for(var key in person){

???????? console.log(key,person[key])

}

七肠虽、如何知道一個(gè)數(shù)據(jù)的類型

使用typeof

但是會(huì)出現(xiàn)的bug有兩個(gè):

1.typeof null?? // ‘object’

2.var function f(){}

typeof? f? // "function"

而其他返回的typeof就是正常的情況

var t = 1;

typeof t? ?// "number"

此處做的是比較簡(jiǎn)單的記錄穴肘,主要是通過學(xué)習(xí)阮一峰老師的JavaScript的教程得來的,他的教程的鏈接是wangdoc.com/javascript舔痕,隨著不斷地學(xué)習(xí)將會(huì)做更多記錄评抚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伯复,隨后出現(xiàn)的幾起案子慨代,更是在濱河造成了極大的恐慌,老刑警劉巖啸如,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侍匙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡叮雳,警方通過查閱死者的電腦和手機(jī)想暗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帘不,“玉大人说莫,你說我怎么就攤上這事∧海” “怎么了储狭?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)捣郊。 經(jīng)常有香客問我辽狈,道長(zhǎng),這世上最難降的妖魔是什么呛牲? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任刮萌,我火速辦了婚禮,結(jié)果婚禮上娘扩,老公的妹妹穿的比我還像新娘着茸。我一直安慰自己僧凤,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布元扔。 她就那樣靜靜地躺著躯保,像睡著了一般。 火紅的嫁衣襯著肌膚如雪澎语。 梳的紋絲不亂的頭發(fā)上途事,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音擅羞,去河邊找鬼尸变。 笑死,一個(gè)胖子當(dāng)著我的面吹牛减俏,可吹牛的內(nèi)容都是我干的召烂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娃承,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奏夫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起历筝,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤酗昼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后梳猪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體麻削,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年春弥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呛哟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匿沛,死狀恐怖扫责,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俺祠,我是刑警寧澤公给,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站蜘渣,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肺然。R本人自食惡果不足惜蔫缸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望际起。 院中可真熱鬧拾碌,春花似錦吐葱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至防症,卻和暖如春孟辑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蔫敲。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工饲嗽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奈嘿。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓貌虾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親裙犹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子尽狠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容