JavaScript數(shù)據(jù)類型小結(jié)

7種數(shù)據(jù)類型

數(shù)字/數(shù)值:

number
整數(shù)和小數(shù):1 1.1 .1
科學(xué)記數(shù)法:1.23e2
二進(jìn)制:0b11
八進(jìn)制:011(后來(lái) ES5 添加了 0o11 語(yǔ)法)
十六進(jìn)制:0x11

number里的幾個(gè)特殊的值:

1.NaN是 JavaScript 的特殊值,表示“非數(shù)字”(Not a Number),主要出現(xiàn)在將字符串解析成數(shù)字出錯(cuò)的場(chǎng)合。


image.png

上面代碼運(yùn)行時(shí)梳码,會(huì)自動(dòng)將字符串x轉(zhuǎn)為數(shù)值余赢,但是由于x不是數(shù)值东羹,所以最后得到結(jié)果為NaN岔冀,表示它是“非數(shù)字”(NaN)。

NaN不等于任何值篡石,包括它本身芥喇。NaN在布爾運(yùn)算時(shí)被當(dāng)作false。
NaN與任何數(shù)(包括它自己)的運(yùn)算夏志,得到的都是NaN乃坤。


image.png

''需要注意的是,NaN不是獨(dú)立的數(shù)據(jù)類型沟蔑,而是一個(gè)特殊數(shù)值湿诊,它的數(shù)據(jù)類型依然屬于Number,使用typeof運(yùn)算符可以看得很清楚瘦材。

image.png

2.Infinity
Infinity表示“無(wú)窮”厅须,用來(lái)表示兩種場(chǎng)景。一種是一個(gè)正的數(shù)值太大食棕,或一個(gè)負(fù)的數(shù)值太小朗和,無(wú)法表示;另一種是非0數(shù)值除以0簿晓,得到Infinity眶拉。

Infinity有正負(fù)之分,Infinity表示正的無(wú)窮憔儿,-Infinity表示負(fù)的無(wú)窮忆植。


image.png

Infinity大于一切數(shù)值(除了NaN),-Infinity小于一切數(shù)值(除了NaN)谒臼。
Infinity與NaN比較朝刊,總是返回false。
3.JavaScript 內(nèi)部實(shí)際上存在2個(gè)0:一個(gè)是+0蜈缤,一個(gè)是-0拾氓,區(qū)別就是64位浮點(diǎn)數(shù)表示法的符號(hào)位不同。它們是等價(jià)的底哥。
-0 === +0 // true
幾乎所有場(chǎng)合咙鞍,正零和負(fù)零都會(huì)被當(dāng)作正常的0。
+0 // 0
-0 // 0
(-0).toString() // '0'
(+0).toString() // '0'
唯一有區(qū)別的場(chǎng)合是叠艳,+0或-0當(dāng)作分母奶陈,返回的值是不相等的。
(1 / +0) === (1 / -0) // false

字符串:

string
空字符串:
多行字符串:
var s = '12345' +
'67890' // 無(wú)回車符號(hào)

var s = 12345 67890 // 含回車符號(hào)

反斜杠(\)在字符串內(nèi)有特殊含義附较,用來(lái)表示一些特殊字符,所以又稱為轉(zhuǎn)義符潦俺。

需要用反斜杠轉(zhuǎn)義的特殊字符拒课,主要有下面這些徐勃。

\0 :null(\u0000)
\b :后退鍵(\u0008)
\f :換頁(yè)符(\u000C)
\n :換行符(\u000A)
\r :回車鍵(\u000D)
\t :制表符(\u0009)
\v :垂直制表符(\u000B)
' :?jiǎn)我?hào)(\u0027)
" :雙引號(hào)(\u0022)
\ :反斜杠(\u005C)

字符串與數(shù)組
字符串可以被視為字符數(shù)組,因此可以使用數(shù)組的方括號(hào)運(yùn)算符早像,用來(lái)返回某個(gè)位置的字符(位置編號(hào)從0開始)僻肖。
var s = 'hello';
s[0] // "h"
s[1] // "e"
s[4] // "o"

// 直接對(duì)字符串使用方括號(hào)運(yùn)算符
'hello'[1] // "e"

如果方括號(hào)中的數(shù)字超過(guò)字符串的長(zhǎng)度,或者方括號(hào)中根本不是數(shù)字卢鹦,則返回undefined臀脏。
'abc'[3] // undefined
'abc'[-1] // undefined
'abc'['x'] // undefined

但是,字符串與數(shù)組的相似性僅此而已冀自。實(shí)際上揉稚,無(wú)法改變字符串之中的單個(gè)字符。
var s = 'hello';

delete s[0];
s // "hello"

s[1] = 'a';
s // "hello"

s[5] = '!';
s // "hello"
上面代碼表示熬粗,字符串內(nèi)部的單個(gè)字符無(wú)法改變和增刪搀玖,這些操作會(huì)默默地失敗。

length屬性返回字符串的長(zhǎng)度驻呐,該屬性也是無(wú)法改變的灌诅。
var s = 'hello';
s.length // 5

s.length = 3;
s.length // 5

s.length = 7;
s.length // 5
上面代碼表示字符串的length屬性無(wú)法改變,但是不會(huì)報(bào)錯(cuò)

Base64 轉(zhuǎn)碼
有時(shí)含末,文本里面包含一些不可打印的符號(hào)猜拾,比如 ASCII 碼0到31的符號(hào)都無(wú)法打印出來(lái),這時(shí)可以使用 Base64 編碼佣盒,將它們轉(zhuǎn)成可以打印的字符挎袜。另一個(gè)場(chǎng)景是,有時(shí)需要以文本格式傳遞二進(jìn)制數(shù)據(jù)沼撕,那么也可以使用 Base64 編碼宋雏。

所謂 Base64 就是一種編碼方法,可以將任意值轉(zhuǎn)成 0~9务豺、A~Z磨总、a-z、+和/這64個(gè)字符組成的可打印字符笼沥。使用它的主要目的蚪燕,不是為了加密,而是為了不出現(xiàn)特殊字符奔浅,簡(jiǎn)化程序的處理馆纳。
JavaScript 原生提供兩個(gè) Base64 相關(guān)的方法。

btoa():任意值轉(zhuǎn)為 Base64 編碼
atob():Base64 編碼轉(zhuǎn)為原來(lái)的值

var string = 'Hello World!';
btoa(string) // "SGVsbG8gV29ybGQh"
atob('SGVsbG8gV29ybGQh') // "Hello World!"

注意汹桦,這兩個(gè)方法不適合非 ASCII 碼的字符鲁驶,會(huì)報(bào)錯(cuò)
btoa('你好') // 報(bào)錯(cuò)

要將非 ASCII 碼字符轉(zhuǎn)為 Base64 編碼,必須中間插入一個(gè)轉(zhuǎn)碼環(huán)節(jié)舞骆,再使用這兩個(gè)方法钥弯。
function b64Encode(str) {
return btoa(encodeURIComponent(str));
}

function b64Decode(str) {
return decodeURIComponent(atob(str));
}

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

布爾:

boolean
boolean 的取值
只有兩個(gè)值:true 和 false
a && b 在 a 和 b 都為 true 時(shí)径荔,取值為 true;否則為 false
a || b 在 a 和 b 都為 false 時(shí)脆霎,取值為 false总处;否則為 true

下列運(yùn)算符會(huì)返回布爾值:

前置邏輯運(yùn)算符: ! (Not)
相等運(yùn)算符:===,!==睛蛛,==鹦马,!=
比較運(yùn)算符:>,>=忆肾,<荸频,<=

除了下面六個(gè)值被轉(zhuǎn)為false,其他值都視為true难菌。
undefined
null
false
0
NaN
""或''(空字符串)
例:


image.png

上面代碼中试溯,if命令后面的判斷條件,預(yù)期應(yīng)該是一個(gè)布爾值郊酒,所以 JavaScript 自動(dòng)將空字符串遇绞,轉(zhuǎn)為布爾值false,導(dǎo)致程序進(jìn)入else代碼塊燎窘,輸出false

注意摹闽,空數(shù)組([])和空對(duì)象({})對(duì)應(yīng)的布爾值,都是true


image.png

image.png

undefined null
都表示沒有值
如果一個(gè)變量沒有被賦值褐健,那么這個(gè)變量的值就是 undefiend 如果你想表示一個(gè)還沒賦值的對(duì)象付鹿,就用 null。如果你想表示一個(gè)還沒賦值的字符串/數(shù)字/布爾/symbol蚜迅,就用 undefined(但是實(shí)際上你直接 var xxx 一下就行了舵匾,不用寫 var xxx = undefined)

null和undefined的區(qū)別是
null是一個(gè)表示“空”的對(duì)象,轉(zhuǎn)為數(shù)值時(shí)為0谁不;undefined是一個(gè)表示"此處無(wú)定義"的原始值坐梯,轉(zhuǎn)為數(shù)值時(shí)為NaN

symobel

對(duì)象:

object
object 就是上面幾種基本類型(無(wú)序地)組合在一起
object 里面可以有 object
var person = {
name: 'Frank',
'child': {
name: 'Jack'
}, // 最后這個(gè)逗號(hào)可有可無(wú)
}
object 的 key 一律是字符串,不存在其他類型的 key
object[''] 是合法的
object['key'] 可以寫作 object.key
注意 object.key 與 object[key] 不同
delete object['key']
'key' in object
function 和Array 都屬于對(duì)象

typeof運(yùn)算符

typeof運(yùn)算符可以返回一個(gè)值的數(shù)據(jù)類型刹帕。

數(shù)值吵血、字符串、布爾值分別返回number偷溺、string蹋辅、boolean。


image.png

函數(shù)雖然是對(duì)象 但是返回的卻是function 此處特殊記憶


image.png

還有一個(gè)不同的就是null 空值 返回的是object
這是由于歷史原因造成的挫掏。1995年的 JavaScript 語(yǔ)言第一版侦另,只設(shè)計(jì)了五種數(shù)據(jù)類型(對(duì)象、整數(shù)、浮點(diǎn)數(shù)淋肾、字符串和布爾值)硫麻,沒考慮null爸邢,只把它當(dāng)作object的一種特殊值樊卓。后來(lái)null獨(dú)立出來(lái),作為一種單獨(dú)的數(shù)據(jù)類型杠河,為了兼容以前的代碼碌尔,typeof null返回object就沒法改變了。

image.png

undefined 返回undefined


image.png

利用這一點(diǎn)券敌,typeof可以用來(lái)檢查一個(gè)沒有聲明的變量唾戚,而不報(bào)錯(cuò)。

對(duì)象返回object


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末待诅,一起剝皮案震驚了整個(gè)濱河市叹坦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卑雁,老刑警劉巖募书,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異测蹲,居然都是意外死亡莹捡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門扣甲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)篮赢,“玉大人,你說(shuō)我怎么就攤上這事琉挖∑羝” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵示辈,是天一觀的道長(zhǎng)寥茫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)顽耳,這世上最難降的妖魔是什么坠敷? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮射富,結(jié)果婚禮上膝迎,老公的妹妹穿的比我還像新娘。我一直安慰自己胰耗,他們只是感情好限次,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般卖漫。 火紅的嫁衣襯著肌膚如雪费尽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天羊始,我揣著相機(jī)與錄音旱幼,去河邊找鬼。 笑死突委,一個(gè)胖子當(dāng)著我的面吹牛柏卤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播匀油,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缘缚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了敌蚜?” 一聲冷哼從身側(cè)響起桥滨,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弛车,沒想到半個(gè)月后齐媒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帅韧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年里初,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忽舟。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡双妨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叮阅,到底是詐尸還是另有隱情刁品,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布浩姥,位于F島的核電站挑随,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏勒叠。R本人自食惡果不足惜兜挨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眯分。 院中可真熱鬧拌汇,春花似錦、人聲如沸弊决。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至与倡,卻和暖如春界逛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纺座。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工息拜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人比驻。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓该溯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親别惦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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