??????本書中,我們這樣來(lái)定義“類型”(與規(guī)范類似):對(duì)語(yǔ)言引擎和開(kāi)發(fā)人員來(lái)說(shuō),類型是值的內(nèi)部特征,它定義了值的行為,以使其區(qū)別于其他值。
??????幾乎所有的JavaScript程序都會(huì)涉及某種形式的強(qiáng)制類型轉(zhuǎn)換,要正確合理地進(jìn)行類型轉(zhuǎn)換,我們必須掌握J(rèn)avaScript中的各個(gè)類型及其內(nèi)在行為。
??????JavaScript的七種內(nèi)置類型:
1.空值null
2.未定義undefined
3.布爾值boolean
4.數(shù)字number
5.字符串string
6.對(duì)象object
7.符號(hào)symbol(ES6新增)
??????typeof運(yùn)算符可以查看值屬于這七種類型的哪一種。
??????(null除外,typeof null 為 "obeject",這是個(gè)bug,但可能會(huì)長(zhǎng)期留存了)
??????還有個(gè)例外是function,照說(shuō)function是對(duì)象,但typeof一個(gè)函數(shù),會(huì)得到"function"。這是因?yàn)楹瘮?shù)是個(gè)“可調(diào)用對(duì)象”,是object的一個(gè)“子類型”。
??????JavaScript里的數(shù)組也是object的一個(gè)“子類型”。typeof 數(shù)組 為 "object"。
??????關(guān)于函數(shù):函數(shù)對(duì)象的length屬性是其聲明的參數(shù)的個(gè)數(shù)。
??????JavaScript中,值有類型,變量沒(méi)有類型,變量可以持有任何類型的值。
??????變量在未持有值的時(shí)候?yàn)閡ndefined。
??????JavaScript中變量undefined和undeclared不同:變量已在作用域中聲明但還沒(méi)有賦值,則為undefined;如果未在作用域中聲明過(guò),則為undeclared。
??????但JavaScript有個(gè)比較狗的地方是,typeof一個(gè)undeclared變量,會(huì)輸出undefined。跟typeof一個(gè)已聲明但未賦值得變量 結(jié)果相同。
??????由于typeof一個(gè)未聲明的變量不會(huì)報(bào)錯(cuò),所以可以用typeof檢查一個(gè)變量是否已被聲明并賦值過(guò)。