2016-09-20 4 views
3

私は、をこのをjavascriptに明示的に設定するためにコールと適用が使用されることを知っています。 次のコードは、の配列オブジェクトであることを確認することです。それはコンソール[オブジェクト配列]を操作します。toString.call(配列)は実際に何をしていますか?

var arr = []; 
console.log(toString.call(arr)); 

誰も私が何をしているか、コードtoString.call(arr)理解させることはできますか?

答えて

4

toString.call(arr)toString(それは何でも)thisが配列に設定されています。どのように行うのかは、toStringの内容に完全に依存します。

たとえば、Object.prototype.toStringの場合、この文字列は確実に[object Array]となります。これは、配列が配列または何か他のものであるかどうかを決定するための事前ES2015環境で便利です:

if (Object.prototype.toString.call(arr) === "[object Array]") { 
    // Yes, it's a true array 
} else { 
    // No, it isn't 
} 

は(ES2015では、Array.isArrayが追加されました:。if (Array.isArray(arr))

あなたの代わりにそれを行うだろう理由arr.toString()の配列は、Objectから継承する配列(はArray.prototype.join)を使用するのではなく、配列がtoStringをオーバーライドし、配列に結合された項目を含む文字列が文字列に変換されます。

関連する問題