一、資料型別
我們通常熟知的資料型別有六種,包括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-------------------------------
○延伸兩句○
深拷貝:修改新變數的值不會影響原有變數的值。預設情況下基本資料型別都是深拷貝。
淺拷貝:修改新變數的值會影響原有的變數的值。預設情況下引用型別都是淺拷貝。