變量類型
????分為:number晰洒、string朝抖、boolean、object谍珊、null治宣、undefined、symbol砌滞。
????注意:
????????(1) 其中null用typeof檢測類型侮邀,顯示的是object; (查閱了相關(guān)資料表明,這個是一個錯誤贝润,JavaScript第一個版本的補(bǔ)遺)绊茧,具體解釋為:null 有屬于自己的類型 Null,而不屬于Object類型题暖,typeof 之所以會判定為 Object 類型按傅,是因?yàn)镴avaScript 數(shù)據(jù)類型在底層都是以二進(jìn)制的形式表示的,二進(jìn)制的前三位為 0 會被 typeof 判斷為對象類型胧卤,而 null 的二進(jìn)制位恰好都是 0 唯绍,因此,null 被誤判斷為 Object 類型枝誊。
????????????????● 000 一 對象類型
????????????????● 010?一 雙精度類型
????????????????● 100 一 字符串類型
????????????????● 110 一 布爾類型
? ? ? ? ? ? ? ? ※ 我們可以通過:Object.prototype.toString.call(null); ????// 得到 [object Null]
????????(2) 當(dāng)使用null == undefined 的時候是為true的况芒,因?yàn)镋CMAScript 規(guī)范認(rèn)為,既然 null 和 ?undefined 的行為很相似叶撒,并且都表示 一個無效的值绝骚,那么它們所表示的內(nèi)容也具有相似性耐版。
? ? ? ? (3) 對于null,當(dāng)一個對象被賦值為null的時候压汪,垃圾回收(也稱為:GC)會擇機(jī)回收該對象并釋放內(nèi)存粪牲。因此,如果需要釋放某個對象止剖,就把該對象設(shè)置為null腺阳,即表示該對象已經(jīng)被清空,目前無效狀態(tài)穿香。
? ? ? ? (4)undefind?表示一個變量自然的亭引、最原始的狀態(tài)值。
? ? ? ? (5) symbol ????
????????????????????????????????一:由于每一個Symbol值都是不相等的皮获,這意味著Symbol值可以作為標(biāo)識符焙蚓,用于對象的屬性名,就能保證不會出現(xiàn)同名的屬性洒宝。這對于一個對象由多個模塊構(gòu)成的情況非常有用购公,能防止某一個鍵被不小心改寫或覆蓋。Symbol值作為對象屬性名時待德,不能用點(diǎn)運(yùn)算符君丁。在對象的內(nèi)部枫夺,使用Symbol值定義屬性時将宪,Symbol值必須放在方括號之中。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 二:Symbol 數(shù)據(jù)類型的另一特點(diǎn)是隱藏性橡庞,for···in较坛,object.keys() 不能訪問。但是可以使用另外一個函數(shù)Object.getOwnPropertySymbols扒最,該方法會返回一個數(shù)組丑勤,成員是當(dāng)前對象的所有用作屬性名的 Symbol 值。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 三:Symbol 數(shù)據(jù)類型的特點(diǎn)是唯一性吧趣,即使是用同一個變量生成的值也不相等法竞。????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 四:Symbol函數(shù)前不能使用new命令,否則會報(bào)錯强挫。這是因?yàn)樯傻腟ymbol是一個原始類型的值岔霸,不是對象。也就是說俯渤,由于Symbol值不是對象呆细,所以不能添加屬性“私常基本上絮爷,它是一種類似于字符串的數(shù)據(jù)類型趴酣。
(先這樣,想到再寫寫坑夯。岖寞。。)