JavaScript の式:
[1 [{}]]
解析/評価しますか? Firefox、Chrome、Konqueror、および rhino では、単一の要素を持つ配列を作成するようundefinedです。しかし、私はその理由を理解していません。
Firefox の場合:
[1 [{}]].toSource()
生産する
[(void 0)]
1 を他の JavaScript 値に置き換えても、同じ結果になるようです。
更新:私は今理解していると思います。codeka、Adrian、および CMS が明確化しました。標準に関しては、ECMAScript 5 について説明しようとしました。
1 [{}]はプロパティ アクセサーであるため、§11.2.1 で説明されています。baseReference評価の結果な1ので、まだ1です。baseValue = GetValue(baseReference) == 1.GetValue(§8.7.1) では、(解決された名前バインディング) でType(1)はないので、1 を返します。ReferencepropertyNameReferenceは を評価{}した結果なので、空のオブジェクトです。propertyNameValue = GetValue(propertyNameReference) == {}- ( §9.10
CheckObjectCoercible(baseValue)) で、(Number is object-coercible) を返します。 propertyNameString = ToString(propertyNameValue)- ( §9.8
ToString) で、戻るToString(ToPrimitive({}, hint String)) - ( §9.1 ) で、(文字列)を渡して
ToPrimitive、オブジェクトの の結果を返します。[[DefaultValue]]PreferredType - ( §8.12.8
[[DefaultValue]]) で、 toString を[[Get]]with argumentの結果としますtoString。 - これは、§15.2.4.2 で return に定義されています。
"[object " + [[Class]] + "]"ここで[[Class]]、 はデフォルト オブジェクト プロトタイプの "Object" です。 - callable があるので
toString、引数を にして呼び出しthisます{}。 Reference基本値がBaseValue(1) で参照名がpropertyNameString( )の type の値を返します"[object Object]"。
次に、配列初期化子 (§11.1.4) に進み、結果を使用して単一の要素配列を構築します。