前端基礎——js資料型別及判斷方法

麥豇豆發表於2021-06-08

一、資料型別

  我們通常熟知的資料型別有六種,包括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-------------------------------

○延伸兩句○

深拷貝:修改新變數的值不會影響原有變數的值。預設情況下基本資料型別都是深拷貝。
淺拷貝:修改新變數的值會影響原有的變數的值。預設情況下引用型別都是淺拷貝。

 

相關文章