-1

私はよく理解されている配列の構造化構文を経験していました。

私たちが言うとき、私たちは以下で正確に何をしていますvar {p, q} = o;か?

and inは、 ie、andのプロパティpqvar {p, q}異なりますか? もし、そうなら、o'p''q'

なぜvar {a, b} = o;機能しないのですか?

> var o = {p: 42, q: true};
    undefined
> p
    ReferenceError: p is not defined
> q
    ReferenceError: q is not defined
> o['p']
    42
> o['q']
    true
> var {p, q} = o;
    undefined
> p
    42
> q
    true
> var {a, b} = o;
    undefined
> a
    undefined
> b
    undefined

*注: 辞書のキーは JavaScript の文字列リテラルであることを知りました。*

4

2 に答える 2

6

これは、オブジェクトの破棄に構文を使用すると、LHS 式 ( {a, b}) で使用される名前が RHS 式 ( ) へのキーとして使用されるためoです。abは のプロパティではないため、これoは失敗します ( を返しますundefined)。

これに関する仕様の関連セクションは、AssignmentProperty : IdentifierReference Initializer (最後から 2 番目) の下のRuntime Semantics: DestructingAssignmentEvaluationにあります。AssignmentProperty はあなたの(そして... 別々に) です。isの StringValue で あり、それは値を取得するためのキーとして使用されます(この場合は同等)。aba'a'oo['a']

次のようにすればうまくいきます:

var {p:a, q:b} = o;

これはAssignmentProperty : PropertyName : AssignmentElement (最後のエントリ) を使用し、プロパティ名 ( p) と代入要素 ( a) を使用します。

于 2015-08-10T09:11:43.863 に答える