1.數(shù)組
??????JavaScript中數(shù)組不需要預(yù)設(shè)長度,數(shù)組元素值不限類型。
??????使用delete運(yùn)算符可以把元素從數(shù)組中刪除,刪除后,數(shù)組的length屬性不會(huì)發(fā)生變化。
??????數(shù)組中如果有空缺的位(亂舉個(gè)例子:比如長度為10,下標(biāo)9為空缺)就叫做“稀疏數(shù)組”。其中的“空白單元”可能會(huì)導(dǎo)致一些出人意料的結(jié)果,具體將在第3章講。
??????數(shù)組也是對(duì)象,對(duì)象可以增加字符串鍵值,但對(duì)于數(shù)組對(duì)象來說,如果字符串鍵值能夠被強(qiáng)制類型轉(zhuǎn)換為十進(jìn)制數(shù)字,它就會(huì)被當(dāng)成數(shù)字索引。
arr['12'] = 1
arr.length // 13
??????類數(shù)組:DOM查詢返回的DOM元素列表、arguments對(duì)象(ES6開始已經(jīng)廢止)
??????有時(shí)需要將類數(shù)組轉(zhuǎn)換為真正的數(shù)組,一般可用數(shù)組工具函數(shù)(slice、forEach、concat)等來實(shí)現(xiàn)。
2.字符串
??????JavaScript中字符串不可變,就是說字符串的成員函數(shù)不會(huì)改變其原始值,而是創(chuàng)建并返回一個(gè)新的字符串。
??????字符串可以“借用”數(shù)組非變更方法,如join、map,可以用硬指定this的方法,讓字符串“調(diào)用”join、map方法。
??????但字符串不能“借用”數(shù)組的reverse方法。
3.數(shù)字
??????JavaScript只有一種數(shù)值類型:number,JavaScript的number屬于雙精度浮點(diǎn)數(shù)。
??????js的number的語法:
??????小數(shù)點(diǎn)前如果是0,可以省略;小數(shù)點(diǎn)后面如果是0,也可以省略。
??????特別大的和特別小的數(shù)字默認(rèn)用指數(shù)格式顯式。
??????Number.toPrecision方法用來指定有效數(shù)位的顯示位數(shù)。
??????數(shù)字字面量可以調(diào)用Number的方法,但是注意,點(diǎn)會(huì)被優(yōu)先當(dāng)作數(shù)字字面量的一部分,比如42.toFixed(3)會(huì)報(bào)錯(cuò),42.0.toFixed(3)或者42..toFixed(3)才行。
??????0x打頭表示16進(jìn)制,0b打頭表示二進(jìn)制,0o打頭表示八進(jìn)制。
??????浮點(diǎn)數(shù)有個(gè)問題,因?yàn)橛芯葐栴}不好比較相等。0.1 + 0.2 === 0.3 // false
??????所以判斷浮點(diǎn)數(shù)相等需要一個(gè)誤差范圍。ES6中,Number.EPSILON表示“機(jī)器精度”,一般是2^-52。
??????Math.abs(a, b) < Number.EPSILON
可判斷浮點(diǎn)數(shù)是否相等。
??????js浮點(diǎn)數(shù)能夠呈現(xiàn)的最大值定義在Number.MAX_VALUE,最小值在Number.MIN_VALUE
??????“整數(shù)”的安全范圍是:最大2^53-1,最小-9007199254740991。ES6把它定義在Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。(比浮點(diǎn)數(shù)最大范圍小)
??????安全整數(shù)最大能到53位,但數(shù)位操作只能適用于32位數(shù)字,所以這些數(shù)字操作的安全范圍更小。
??????Number.isInterger
可判斷是否整數(shù)
??????Number.isSafeInteger
可判斷是否安全整數(shù)
4.特殊數(shù)值
??????undefined表示missing value
??????null表示empty value
??????void運(yùn)算符:一元運(yùn)算符,可以出現(xiàn)在任意類型的操作數(shù)之前執(zhí)行操作數(shù),卻忽略操作數(shù)的返回值,返回一個(gè)undefined
??????NaN:意指“無效數(shù)值”。NaN與自身不相等,所以可以用內(nèi)置的全局工具函數(shù)isNaN來判斷一個(gè)值是否是NaN。
??????Infinity:無窮。Infinity/Infinity結(jié)果為NaN。
??????負(fù)0:JavaScript中有-0,它有些啰里啰唆的特點(diǎn)我這里就不抄了,它存在的意義是有些程序中需要符號(hào)來表示方向信息或者其它信息。
??????ES6有一個(gè)Object.is方法可以用來判斷兩個(gè)值是否絕對(duì)相等,像NaN、-0這些特殊值可以用它來判斷。其它情況下,能用==和===的就沒必要用Object.is,因?yàn)楹笳咝什桓摺?/p>
5.值和引用
??????簡單標(biāo)量基本類型值(字符串和數(shù)字等)通過值復(fù)制來賦值/傳遞,而復(fù)合值(對(duì)象等)通過引用復(fù)制來賦值/傳遞。JavaScript中的引用和其他語言中的引用/指針不同,它們不能指向別的變量/引用,只能指向值。