Javascript: N種方法判斷一個變量是不是數組

Array.isArray()

IE9+,很是廣泛的用法,好比{a: '1'},Array.isArray({a: '1'})返回false數組

variable.constructor === Array

變量是由Array構造函數生成的數組,尋找變量的構造函數...函數

[1,2,3] instanceof Array

返回一個布爾值,順便提一下,instanceof這個方法判斷基本數據類型是會失效的,好比 1 instanceof Number爲假,'2' instanceof String爲假,可是若是這樣處理:測試

const a = new Number(2);
a instanceof Number     // true
複製代碼

隨便找一個數組僅有的方法

可能有人有疑問,2..sort或者'2'.sort會不會報錯,實際上是不會的,可是ture.sort會不起反應,因此最優的作法是:spa

typeof variable === 'object' && variable.sort === Array.prototype.sort
複製代碼

Object.prototype.toString.call(variable) === '[object Array]'

基本全支持,這個是慣常的用法,很是準確prototype

Object.getPrototypeOf(variable) === Array.prototype

IE9+,這也是個方法,可是須要注意,在 ES5 中,若是參數不是一個對象類型,將拋出一個TypeError異常。在 ES2015 中,參數會被強制轉換爲一個 Object:code

Object.getPrototypeOf('foo');
// TypeError: "foo" is not an object (ES5 code)
Object.getPrototypeOf('foo');
// String.prototype                  (ES2015 code)
複製代碼

Array.prototype.isPrototypeOf(variable)

這樣真的能夠,並且基本全支持,Object.isPrototypeOf() 方法用於測試一個對象是否存在於另外一個對象的原型鏈上。對象

相關文章
相關標籤/搜索