JSが配列かどうかを判断する方法は何ですか?

リファレンス:JSが配列かどうかを判断する4つの方法

1、インスタンス

let a = [];
a instanceof Array;  //true

instanceof演算子は、変数aのプロトタイプチェーンにArray.prototypeプロパティが存在するかどうかを確認します
問題があります:

  1. プロトタイププロパティは変更できるため、最初にtrueと判断された場合、常にtrueであるとは限りません
  2. スクリプトに複数のグローバル環境(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;

おすすめ

転載: blog.csdn.net/weixin_43912756/article/details/108354539