一、typeof運算符判斷
對於js的數據類型判斷,一般都會用typeof運算符,但是typeof運算符判斷數組的結果是’object’,這是因為數組本質上是一個對象,它的每個元素都有自己的屬性名(索引值),但數組擁有的方法和屬性,普通對象並沒有,因此這種方法並不靠譜。
let arr = [1, 2, 3]; console.log(typeof arr); // 'object'
二、Array.isArray()方法判斷
Array.isArray()方法的作用就是判斷某個值是否為數組,它是ES5中新增加的方法,因此在ES5以下的版本中無法使用。它的使用非常簡單,就是直接調用這個方法,如果是數組則返回true,否則返回false。
let arr = [1, 2, 3]; console.log(Array.isArray(arr)); // true
需要注意的是,Array.isArray()方法雖然簡單方便,但是一定要注意是使用它而不是typeof運算符進行判斷。
三、instanceof運算符判斷
instanceof運算符也可以用來判斷某個值是否為數組,它的原理是通過判斷某個實例是否是某個構造函數的實例。因為數組是Object的實例,並且數組的原型鏈中還有Array這個構造函數,所以可以使用instanceof來判斷。
let arr = [1, 2, 3]; console.log(arr instanceof Array); // true
四、Object.prototype.toString.call()方法判斷
Object.prototype.toString.call方法雖然麻煩一些,但是它是最為準確的一種方法。因為所有的對象在調用Object.prototype.toString方法的時候都會返回”[object Object]”,但是對於數組來說,調用toString方法會返回”[object Array]”,因此我們可以通過這種方式來判斷某個值是否為數組。
let arr = [1, 2, 3]; console.log(Object.prototype.toString.call(arr) === "[object Array]"); // true
五、總結
對數組判斷,推薦使用Array.isArray()或Object.prototype.toString.call()方法來進行判斷。而typeof運算符和instanceof運算符用來判斷數據類型的時候,則不適合判斷數組。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/287105.html