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 を返します。Reference
propertyNameReference
は を評価{}
した結果なので、空のオブジェクトです。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) に進み、結果を使用して単一の要素配列を構築します。