物件、陣列以及型別判斷。
前言
在 2018 iT 邦幫忙鐵人賽,看到Kuro大的重新認識 JavaScript 系列文,仔細的閱讀後,紀錄自己觀念不足的部份,也非常推薦給大家觀看此系列文。
基本型別與物件型別
JavaScript 內建的型別主要可以分成基本型別 (Primitives) 與物件型別 (Object) 兩大類。
而基本型別又分成 string、number、boolean、null、undefined 幾種,
除了以上幾種之外,其他都可以歸類至
物件型別 (Object)
物件型別 (Object)
判斷屬性是否存在
方法1:物件中不存在的屬性,此時會回傳 undefined
方法2:hasOwnProperty() 方法不會往上檢查物件的原型鏈(prototype chain),而 in 運算子,則會繼續往物件原型鏈上檢查。
方法1
物件中不存在的屬性,此時會回傳 undefined
1 | var obj = {}; |
但這麼做會有個例外,就是當該屬性剛好就是 undefined 時,這招就沒用了。
除了檢查 undefined 之外,還有 in 運算子 與 hasOwnProperty() 方法。
方法2
雖然兩者都可以檢查物件的屬性是否存在,
但hasOwnProperty() 方法不會往上檢查物件的原型鏈(prototype chain),,只會檢查物件本身是否存在這個屬性,
而 in 運算子,則會繼續往物件原型鏈上檢查。
1 | var obj = { |
上述範例1,雖然二種檢查結果都一樣,但我們可看下列的範例2,當檢查某一屬性是在原型鋉上時,會有什麼不一樣
1 | //toString 為 原型鍊上的 屬性 |
typeof: 型別判斷
檢查變數型別 (正確來講應該是值,變數沒有型別,值才有),可以透過 typeof 運算子來處理:
1 | typeof true; // 'boolean' |
要注意的是,透過 typeof 運算子回傳的東西都是「字串」。
typeof null 為什麼是 “object” ?
其實這只是一個 Bug ,所以小心使用 null
。
如何判別是否為陣列
當我們利用 typeof 去檢查一個「陣列」時,會得到 “object“ 的結果,
typeof [ ]; // 'object'
但如果在實務上仍會有需要判斷某變數是否為一個陣列而非物件的時候,可用 isArray() 方法,
1 | Array.isArray([]); // true |