1. ホーム
  2. javascript

[解決済み] Array.isArrayとinstanceof Arrayの使い分けについて

2023-06-22 02:15:25

疑問点

配列が配列であるかオブジェクトであるかを判断する方法は2つあります。使用方法 typeof item === "object"; を使用すると、オブジェクトと配列に対して真を返します。配列はjavascriptでは比較的新しいもので、配列はオブジェクトのプロトタイプだからです(この表現は間違っているかもしれませんので、遠慮なく訂正してください)。したがって、私が知っている配列が配列であるかどうかを判断する方法は2つあります。

解決策 1:

Array.isArray(item);

解決策2

item instanceof Array;

私の質問です。

  1. これら 2 つのソリューションの違いは何ですか。
  2. この 2 つのうち、どちらが望ましい解決策ですか?
  3. どちらが処理時間が早いですか?

どのように解決するのですか?

<ブロッククオート

1.この2つのソリューションの違いは何ですか?

isArray はES5メソッドなので古いブラウザではサポートされていませんが、オブジェクトがArrayかどうかを確実に判断します。

インスタンスオブ Array.prototype がオブジェクトの [[Prototype]] チェーンにあります。フレームをまたぐ配列のチェックでは 配列 のコンストラクタがテスト用と異なる可能性があるためです。

2.どちらが望ましい解決策でしょうか?

"Preferred"は、何らかの選択基準を想定しています。一般に、好ましい方法は次のようなものです。

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

これはES3ブラウザに適しており、フレームを越えて動作します。ES5ブラウザのみを考慮した場合。 isArray はおそらくOKでしょう。

3.処理時間が早いのはどちらですか?

どちらも処理時間は無視できるほど短いので、ほとんど関係ありません。それよりも、信頼性の高い方を選択する方がはるかに重要です。また Array.isArray メソッドを使用して、それが組み込まれていないブラウザーに追加することができます。

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