一、數據類型
我們通常熟知的數據類型有六種,包括5種基本數據類型(Number, String, Boolean, Undefined, Null)和一種引用數據類型(Object)。ES6又新增了一個基本數據類型Symbol,所以現在應該是七種數據類型。
注:有些地方會把引用類型分為對象(Object)、數組(Array)、函數(Function)三種,還有博客中提到了chrome 67中的新功能BigInt類型,我這里暫時不算進去。
1、Number
數字類型,包括整數和浮點數。
有一個特殊的值NaN,即非數值。js 規定NaN不等於NaN,可以用 isNaN() 來檢測是否是非數值型。
2、String
字符串類型,單雙引號都行。
3、Boolean
布爾類型,只有兩個值,true和false。
4、Undefined
聲明了變量,但是沒有初始化,則這個變量的類型就是undefined,且其默認初始化值為undefined。
5、Null
null類型的默認值是null,從邏輯角度講,是表示一個空對象指針。
注:區分undefined和null——當一個變量聲明后,未初始化,則該值為undefined;如果這個值是為了保存對象,則修改默認初始化值為null。 所以當檢測其類型時,會顯示類型為object。
6、Object(Data、Function、Array等)
該類型實例化的對象,是一組數據和功能(函數)的集合。
實例化對象的過程有兩種,一種是通過new操作符,一種是通過對象字面量表示法。
Array()、Date()、function()類型,都是從object繼承的。
7、Symbol(ES6 新增)
Symbol 類型本質上是一種唯一標識符,可用作對象的唯一屬性名。
唯一性
Symbol 類型的對象永遠不相等,即使是用同一個變量生成的值也不相等。
隱藏性
for···in,object.keys() 不能訪問,可以用專門針對Symbol的方法來獲取。
Symbol 類型的一些應用和參考
https://www.cnblogs.com/linziwei/p/10818101.html
https://blog.csdn.net/qq_33408245/article/details/82953143
二、判斷方法
1、typeof
typeof可以區分一部分數據類型,結果如下:
typeof 123 //Number typeof 'abc' //String typeof true //Boolean typeof undefined //Undefined
typeof Symbol() //Symbol
typeof null //Object
typeof { } //Object
typeof [ ] //Object
typeof console.log() //Function
2、判斷null、object和array
從上面的結果可以看出,用typeof檢測 null、數組、對象的結果都是Object,所以需要用其他方法區分他們的類型。
判斷null
可以用===null來判斷。
判斷object和array
① isArray
Array.isArray([]) //true Array.isArray({}) //false
② instanceof
[] instanceof Array //true {} instanceof Array //false
③ constructor
{}.constructor //返回object [].constructor //返回Array
④ Object.prototype.toString.call
Object.prototype.toString.call([]) //["object Array"] Object.prototype.toString.call({}) //["object Object"]
END-------------------------------
○延伸兩句○
深拷貝:修改新變量的值不會影響原有變量的值。默認情況下基本數據類型都是深拷貝。
淺拷貝:修改新變量的值會影響原有的變量的值。默認情況下引用類型都是淺拷貝。