變量類型
????分為:number、string、boolean、object、null、undefined、symbol。
????注意:
????????(1) 其中null用typeof檢測(cè)類型,顯示的是object; (查閱了相關(guān)資料表明,這個(gè)是一個(gè)錯(cuò)誤,JavaScript第一個(gè)版本的補(bǔ)遺),具體解釋為:null 有屬于自己的類型 Null,而不屬于Object類型,typeof 之所以會(huì)判定為 Object 類型,是因?yàn)镴avaScript 數(shù)據(jù)類型在底層都是以二進(jìn)制的形式表示的,二進(jìn)制的前三位為 0 會(huì)被 typeof 判斷為對(duì)象類型,而 null 的二進(jìn)制位恰好都是 0 ,因此,null 被誤判斷為 Object 類型。
????????????????● 000 一 對(duì)象類型
????????????????● 010?一 雙精度類型
????????????????● 100 一 字符串類型
????????????????● 110 一 布爾類型
? ? ? ? ? ? ? ? ※ 我們可以通過:Object.prototype.toString.call(null); ????// 得到 [object Null]
????????(2) 當(dāng)使用null == undefined 的時(shí)候是為true的,因?yàn)镋CMAScript 規(guī)范認(rèn)為,既然 null 和 ?undefined 的行為很相似,并且都表示 一個(gè)無效的值,那么它們所表示的內(nèi)容也具有相似性。
? ? ? ? (3) 對(duì)于null,當(dāng)一個(gè)對(duì)象被賦值為null的時(shí)候,垃圾回收(也稱為:GC)會(huì)擇機(jī)回收該對(duì)象并釋放內(nèi)存。因此,如果需要釋放某個(gè)對(duì)象,就把該對(duì)象設(shè)置為null,即表示該對(duì)象已經(jīng)被清空,目前無效狀態(tài)。
? ? ? ? (4)undefind?表示一個(gè)變量自然的、最原始的狀態(tài)值。
? ? ? ? (5) symbol ????
????????????????????????????????一:由于每一個(gè)Symbol值都是不相等的,這意味著Symbol值可以作為標(biāo)識(shí)符,用于對(duì)象的屬性名,就能保證不會(huì)出現(xiàn)同名的屬性。這對(duì)于一個(gè)對(duì)象由多個(gè)模塊構(gòu)成的情況非常有用,能防止某一個(gè)鍵被不小心改寫或覆蓋。Symbol值作為對(duì)象屬性名時(shí),不能用點(diǎn)運(yùn)算符。在對(duì)象的內(nèi)部,使用Symbol值定義屬性時(shí),Symbol值必須放在方括號(hào)之中。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 二:Symbol 數(shù)據(jù)類型的另一特點(diǎn)是隱藏性,for···in,object.keys() 不能訪問。但是可以使用另外一個(gè)函數(shù)Object.getOwnPropertySymbols,該方法會(huì)返回一個(gè)數(shù)組,成員是當(dāng)前對(duì)象的所有用作屬性名的 Symbol 值。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 三:Symbol 數(shù)據(jù)類型的特點(diǎn)是唯一性,即使是用同一個(gè)變量生成的值也不相等。????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 四:Symbol函數(shù)前不能使用new命令,否則會(huì)報(bào)錯(cuò)。這是因?yàn)樯傻腟ymbol是一個(gè)原始類型的值,不是對(duì)象。也就是說,由于Symbol值不是對(duì)象,所以不能添加屬性。基本上,它是一種類似于字符串的數(shù)據(jù)類型。
(先這樣,想到再寫寫。。。)