typeof and instanceof
這堂課將介紹兩個實用的內建語法,typeof and instanceof
typeof
當我們都過 typeof 加上一個空格後,放上我們要辨識的變數,它就會回傳一個該變數型別的字串,如下:
1 | var a = 3; |
而因為陣列也是物件,所以透過 typeof 查看陣列型別時,也會回傳字串 object,但這裡有一個更實用的方法來辨別一般物件與陣列,只要將 Object.prototype 的方法 toString 透過 call 將 this 指向陣列,它就不會單純回傳一個字串 object
1 | var d = []; |
但如果直接在陣列呼叫 toString,它會將陣列中的值字串化,如陣列 d 是一個空陣列,因此回傳空值
1 | console.log(d.toString()); // |
而 undefined 的型別就是 undefined
1 | console.log(typeof undefined); // undefined |
Bug
但這裡有一個 JavaScript 的 Bug,而且它也沒有打算修復,因為這個 Bug 已經存在很久了,如果修復它會影響很多已存在的專案和 library ; 那就是透過 typeof 查看 null 時,會回傳字串 object
1 | console.log(typeof null); // object |
instanceof
instanceof 則是會判斷前面的值是否可以在它的 prototypal chain 找到後面的值,如下範例:
先建立一個 function constructor - Person,再透過 new 建立新的物件 e ,因為 e 的 prototype 就是 Person,所以回傳 true。
1 | function Person(name) { |