0

公案は以下。私のレッスンでは、「配列」という言葉がそのようにコードに突き刺さっているのを見たことがありません。私が研究できる他の例はありますか?

it("should know properties that are functions act like methods", function ()
{
  var meglomaniac = {
    mastermind : "Brain",
    henchman: "Pinky",
    battleCry: function (noOfBrains)
    {
      return "They are " + this.henchman + " and the" +
      Array(noOfBrains + 1).join(" " + this.mastermind);
    }
};

var battleCry = meglomaniac.battleCry(4);
expect(FILL_ME_IN).toMatch(battleCry);
});

関数であるプロパティがメソッドのように機能することを知っている必要があります。それはあなたのカルマを傷つけています。

「この値を入力してください」は、「ピンキーとブレイン ブレイン ブレインです」と一致するはずです。

4

2 に答える 2

4

したがって、Array(noOfBrains + 1)すべての要素が未定義である、長さ 5 の新しい配列を作成します (noOfBrains が 4 として渡されることを考えると)。

[undefined, undefined, undefined, undefined, undefined]

次に、結合操作は文字列 (" Brain") を取得し、そのコピーを配列の各要素の間に配置します。(結合のより一般的な使用法はarray.join(", ")、配列をコンマで区切るようなものです)

したがって、基本的には次のとおりです。

undefined + " Brain" + undefined + " Brain" + undefined + " Brain"+ undefined + " Brain" + undefined

未定義のものはjoinによって無視されるため、これは「Brain Brain Brain Brain」になります。

于 2013-09-04T19:16:10.890 に答える
1

ECMAScript 15.4.1によると、次Array(...)のように動作しnew Array(...)ます。

Arrayコンストラクターとしてではなく関数として呼び出されると、新しい Array オブジェクトを作成して初期化します。したがって、関数呼び出しは、同じ引数を持つArray(...)オブジェクト作成式と同等です。new Array(...)

ES 15.4.2.2によると、引数が 1 つの形式では、プロパティが引数の値に設定されnew Array(len)た空の配列が作成されます。lengthしたがって、Array(noOfBrains + 1)size の空の配列を作成しますnoOfBrains + 1

ES 15.4.4.5 に従って、配列.join(separator)の値を求めて配列をループしますlength(ステップ 10)。配列の値を連結し、引数として に渡された区切り値で結合して文字列を作成しますjoin。ステップ 8 およびステップ 10.c に従って、undefined配列値は によって空の文字列としてレンダリングされます.join

初期化したばかりの配列は空なので、その値はすべてundefined. したがって、.join空の文字列のリストを区切り文字列 " Brain" で結合します。

于 2013-09-04T19:15:50.140 に答える