Function.prototype.toString などの代わりに Object.prototype.toString を使用するのはなぜですか?これは、toString の解釈方法に関連しています。以下は ECMA の Object.prototype.toString の説明です:
Object.prototype.toString( )
toString メソッドが呼び出されると、次の手順が実行されます。
1. このオブジェクトの [[Class]] プロパティを取得します。
2. 3 つの文字列「[object」、Result(1)、および「]」を連結して文字列値を計算します。
3. 結果を返す(2)
プロセスは簡単に次のとおりです。 1. オブジェクトのクラス名 (オブジェクト タイプ) を取得します。 2. [オブジェクト、取得したクラス名]を結合してリターンします。
ECMA には配列について次のような説明があります:
新しく構築されたオブジェクトの [[Class]] プロパティは「Array」に設定されます。
したがって、次のコードを使用して配列を検出します:
function isArray(o) { return Object.prototype.toString.call(o) === '[オブジェクト配列]' }
この方法は、instanceof のクロスページ問題を解決するだけでなく、属性検出方法の問題も解決します。これは実に優れた解決策です。
さらに、このソリューションは、日付、関数、その他のタイプのオブジェクトを決定するために適用することもできます。
他にもいくつかの方法があります:
var arr = [] 配列の arr インスタンスを返します。
他に良い方法があれば、投稿してください。