2

変数を確認したいのですが、それは配列ですか?

これは、パフォーマンスを向上させるために使用される最良の方法です。

isArray

また

instanceof

4

2 に答える 2

3

大物(Jquery、アンダースコア)は次のようにします:

  isArray = Array.isArray || function(obj) {
    return Object.prototype.toString.call(obj) == '[object Array]';
  };

しかし、これらはあなたが探しているドロイドではありません。実際にはこれはまったく必要ありません。変数を「チェック」しないでください。変数を知っているだけです。

于 2013-10-05T10:21:10.227 に答える
2

Array.IsArray を使用することをお勧めします。

また、これinstanceofが有害であると見なされていることを確認してください(または、堅牢な の書き方isArray

マルチフレーム DOM 環境でのスクリプト作成に関しては、問題が発生します。簡単に言えば、1 つの iframe 内で作成された Array オブジェクトは、[[Prototype]] を別の iframe 内で作成された配列と共有しません。それらのコンストラクターは異なるオブジェクトであるため、instanceof チェックとコンストラクター チェックの両方が失敗します。

また、2 つの速度の違いを確認すると、isArray の方が比較的高速であることがわかります。

これを確認するためのリンクは次のとおりです。- Array.isArray と instanceof Array の比較

以下のコードは、速度変動をチェックするために使用されます。

<script>
  Benchmark.prototype.setup = function() {
    var a = [1, 2, 3];
    var s = 'example';
    var f = false;
  };
</script>

Array.IsArray の使用:

(Array.isArray(a) && (Array.isArray(s) || Array.isArray(f)));

25,255,693 オペレーション/秒を実行しました

instanceof を使用するようになりました:-

 (a instanceof Array && (s instanceof Array || f instanceof Array));

21,594,618 ops/秒を実行しました

つまり、instanceOf は IsArray を使用するよりも 15% 遅くなります。

于 2013-10-05T10:15:02.443 に答える