JS 中檢測陣列的四種方法
阿新 • • 發佈:2020-01-10
今天和大家分享一下 JS 中檢測是不是陣列的四種方法,雖然篇幅不長,不過方法應該算是比較全面了。
1. instanceof 方法
instanceof 用於檢測一個物件是不是某個類的例項,陣列也是一種物件所以也可以利用 instaceof 來進行判斷。
let arr = [1, 2, 3];
console.log(arr.instanceof(Array)); // true
這種方法在只有一個全域性作用域的環境下是可以的,但是如果一個網頁中包含多個框架,那麼就會存在不同的全域性環境,不同的環境 Array 建構函式是不同的,所以要在兩個框架下傳遞陣列時就會出現問題,在某個框架裡檢測出來是陣列但是在另一個框架裡檢測出來並不是陣列。
2. Array.isArray 方法
isArray 方法用於確定一個值到底是不是陣列,不管是在哪個環境下都是可以的。不過這個方法在低版本的 IE 的瀏覽器中是不支援的。
let arr = [1, 2, 3];
console.log(Array.isArray(arr));
3. 陣列建構函式
在建立陣列時可以使用 let arr = new Array()
的形式,反過來我們也可以利用 constructor 屬性來獲取它的建構函式根據是不是 Array 來判斷一個值是不是陣列。
let arr = [1, 2, 3]; console.log(arr.constructor === Array) // true
這種方法和方法 1 有相同的缺點,在多個環境下 Array 建構函式有可能是不同的,而且在多個環境下如果要進行陣列傳遞的話很有可能會出現問題。
4. Object.prototype.toString.call() 方法
我們知道,在任何值上呼叫 Object 原生的 toString 方法,都會返回 [object NativeConstructorName] 格式的字串,利用這一點也可以用來檢測是不是陣列。
let arr = [1, 2, 3]; console.log(Object.prototype.toString.call(arr) === "[object Array]"); // true
由於原生陣列的建構函式名與全域性環境無關,因此無論在哪一個環境下這個方法都可以正確的檢測一個數組。
注意:方法 1 和 方法 3 中的 Array 是 window 的屬性。
完,如有不恰當之處歡迎指正哦