関数に渡された引数を結合し、それらを文字列として返す必要があります。Javascript が特別なタイプの配列を使用して引数を内部に格納することをどこかで読んだことを覚えています。呼び出そうとするとarguments.join("")
、そのようなメソッドがないことを示す実行時エラーが発生しました。
Javascript が、参照を使用して引数名を指す標準配列に引数を格納しないのはなぜですか?
関数に渡された引数を結合し、それらを文字列として返す必要があります。Javascript が特別なタイプの配列を使用して引数を内部に格納することをどこかで読んだことを覚えています。呼び出そうとするとarguments.join("")
、そのようなメソッドがないことを示す実行時エラーが発生しました。
Javascript が、参照を使用して引数名を指す標準配列に引数を格納しないのはなぜですか?
が特別な方法の 1 つは、arguments
実際にはパラメーターを直接参照することです。JavaScript では、通常の Array インスタンスでこれを行うことはできません。
function foo( param ) {
arguments[0] = "changed";
alert( param ); // says "changed"
}
foo( "original" );
それが「機能」であるかどうかは、明らかに議論の余地のある問題です。イライラするバグを作成する以外の目的で使用したことを思い出せません。要点は、単純な Array インスタンスをどういうわけかかなり奇妙な動作 (JavaScript 用語では奇妙) にすると、あらゆる種類の奇妙な問題が発生するということです。
編集— この動作を模倣するセッターとゲッターを使用して Array インスタンスを作成できることがコメントで指摘されています。自分のコードでプログラム的にそれを行うのはちょっと難しいでしょうが(アドホックではなく、一般的な方法で)、明らかにランタイムがそれを行うことができます.
これは実際には JavaScript の設計エラーです。
次のように実数配列に変換できます。
var args = Array.slice(arguments);
またはこれは古いブラウザで:
var args = Array.prototype.slice.call(arguments, 0);
Array
でメソッドを直接呼び出すことはできませんが、配列のような機能があるため、を使用してメソッドをarguments
呼び出すことができます。Array
call
Array.prototype.join.call(arguments, "");