我們知道在js中除了function以外的所有對象如果用typeof來判斷的話,它們都顯示Object,但是有時候我們並不想這樣,比如我判斷一個數組就應該是個數組而不是打印Object。
var arr = []; console.log(typeof arr); //object
解決方法1:
var arr = []; console.log(arr.constructor.name==="Array"); //true
解決方法2:
var arr = []; console.log(arr instanceof Array); //true
解決方法3:
var arr = []; console.log(Object.prototype.toString.call(arr)==="[object Array]"); //true
在這裡我推薦方法3,另外如果你不知道這些方法都是什麼意思,可以看一下JS對象的幾個方法介紹這篇文章。
如果你有一些基礎,那麼我給你解釋一下方法3是怎麼做到的。
首先toString是obj的屬性,我通過構造函數Object的原型改變它的toString方法。如果沒有call打印的是prototype,用prototype.toString()打印出來的是Object,然後用call的話會將這個構造函數的this指向這個call裡面的第一個參數,通過這樣就可以打印它的類型了。