在JavaScript語言中,有7種語言類型,他們分別是:
- Undefined
- Null
- Boolean
- Number
- String
- Object
- Symbol(ES6中新加)
下面我們一個個來看:
Undefined
Undefined表示未定義,他的值只有一個,就是undefined。在JavaScript中,任何變量在賦值前都是Undefined類型,值為undefined。
根據(jù)他的意義,我們一般不會把undefined賦給一個值,從而確保所有undefined的值都處于定義了沒有賦值的狀態(tài)。
值得注意的是,在JavaScript中,undefined是一個變量,而不是關(guān)鍵字,所以我們?yōu)榱吮苊鈛ndefined被篡改,我們通常會使用void 0來代替undefined。
Null
Null表示定義了但為空,他的值也只有一個就是null。和undefined不同的是,null是一個關(guān)鍵字,所以可以放心使用。
Boolean
布爾類型有兩個值,分別為true和false,分別代表真假。
Number
數(shù)字類型總共有18437736874454810627(就是:2^64 - 2^53+3)個。
他有三個額外的數(shù)值:
- NaN
- Infinity(無窮大)
- -Infinity(負無窮大)
后面兩個數(shù)值的引入主要是為了不讓除以0出錯。(JavaScript中有+0和-0的區(qū)別)
因為JavaScript的非整數(shù)是根據(jù)浮點數(shù)定義的,所以非整數(shù)的類型無法用==(===更不行)來比較,最為著名的就是0.1+0.2 == 0.3這段代碼的輸出為false,我們可以用最小精度值來進行比較:
Math.abs(0.1+0.2-0.3) <= Number.EPSILON
String
字符串,值得注意的是,他有一個最大長度的限制:2^53 - 1。
Object
Object表示對象,他可以被視為一切物體的總稱。
甚至于JavaScript中的基本類型,在對象類型中我們都可以找到對應(yīng)的對象:
- Boolean
- Number
- String
- Symbol
值得注意的是,當(dāng)我們執(zhí)行下面這段代碼true === new Boolean(true),我們會發(fā)現(xiàn)他返回的結(jié)果是false,等號的兩邊一個是布爾類型的true,另一邊確是一個對象。(Symbol比較特殊,直接new會報錯)
有了上面這個對象,我們甚至可以給基本類型來增加一些臨時的方法。
String.prototype.sayHi = () => console.log('hello world');
'test'.sayHi();
我們可以看到在控制臺真的打印出來了hello world。
Symbol
這是一個ES6新引入的類型,他在對象中存在,但是卻不能用new的方式來生成一個新的Symbol,我們可以通過傳入一個key來對他進行賦值,我們可以這樣來使用他:
let symbol1 = Symbol('test');
值得注意的是,即使我們創(chuàng)建兩個Symbol('test'),這兩個symbol也是不相等的。
類型轉(zhuǎn)換
作為一門弱類型語言,JavaScript的==運算會實現(xiàn)跨類型的比較,這經(jīng)常會造成一些判斷的失誤,在我們真實的工作場景中,經(jīng)常會要求程序員對類型轉(zhuǎn)換后使用===來判斷左右兩邊的相等。