2

関数に渡された引数を結合し、それらを文字列として返す必要があります。Javascript が特別なタイプの配列を使用して引数を内部に格納することをどこかで読んだことを覚えています。呼び出そうとするとarguments.join("")、そのようなメソッドがないことを示す実行時エラーが発生しました。

Javascript が、参照を使用して引数名を指す標準配列に引数を格納しないのはなぜですか?

4

3 に答える 3

4

が特別な方法の 1 つは、arguments実際にはパラメーターを直接参照することです。JavaScript では、通常の Array インスタンスでこれを行うことはできません。

function foo( param ) {
  arguments[0] = "changed";
  alert( param ); // says "changed"
}

foo( "original" );

それが「機能」であるかどうかは、明らかに議論の余地のある問題です。イライラするバグを作成する以外の目的で使用したことを思い出せません。要点は、単純な Array インスタンスをどういうわけかかなり奇妙な動作 (JavaScript 用語では奇妙) にすると、あらゆる種類の奇妙な問題が発生するということです。

編集— この動作を模倣するセッターとゲッターを使用して Array インスタンスを作成できることがコメントで指摘されています。自分のコードでプログラム的にそれを行うのはちょっと難しいでしょうが(アドホックではなく、一般的な方法で)、明らかにランタイムがそれを行うことができます.

于 2013-05-19T15:14:33.063 に答える
2

これは実際には JavaScript の設計エラーです。

次のように実数配列に変換できます。

var args = Array.slice(arguments);

またはこれは古いブラウザで:

var args = Array.prototype.slice.call(arguments, 0);
于 2013-05-19T15:14:29.193 に答える
1

Arrayでメソッドを直接呼び出すことはできませんが、配列のような機能があるため、を使用してメソッドをarguments呼び出すことができます。Arraycall

Array.prototype.join.call(arguments, "");
于 2013-05-19T15:22:26.393 に答える