リファレンス:JSが配列かどうかを判断する4つの方法
1、インスタンス
let a = [];
a instanceof Array; //true
instanceof演算子は、変数aのプロトタイプチェーンにArray.prototypeプロパティが存在するかどうかを確認します。
問題があります:
- プロトタイププロパティは変更できるため、最初にtrueと判断された場合、常にtrueであるとは限りません
- スクリプトに複数のグローバル環境(html内の複数のiframeオブジェクトなど)がある場合、異なるグローバル環境には独自の
Array.prototype
属性があります。Array.prototype !== window.frames[0].Array.prototype
2、コンストラクター
let a = [];
a.constructor === Array // true
問題があります:
この判断には複数の地球環境問題もあり、instanceofと同じ問題が発生します。
3、Object.prototype.toString.call()
Object.prototype.toString().call()
たとえば、さまざまなタイプのオブジェクトを取得できます。
let a = [1,2,3]
Object.prototype.toString.call(a) === '[object Array]';//true
//检验是否是函数
let a = function () {};
Object.prototype.toString.call(a) === '[object Function]';//true
//检验是否是数字
let b = 1;
Object.prototype.toString.call(a) === '[object Number]';//true
複数のグローバル環境であっObject.prototype.toString().call()
ても、予想される処理判断を満たすことができます。
4. Array.isArray()(最も推奨)
let a = [1, 2, 3]
Array.isArray(a) // true;