Because "key" + test
is an expression and not an identifier nor a string literal nor a number literal, which are the only things that are allowed as the key in an object literal.
You have to use the []
notation after creating the object for such a dynamic key:
var test123 = {};
test123["key" + test] = 123;
An identifier is basically the same subset of characters that you can call a variable (letters, numbers, _
and $
; may not start with a number), and a string literal is any string enclosed with '
or "
.
So, the only types of keys you can use in an object literal are:
{
a0: true, // valid identifier
$$_: true, // same
123: true, // valid numeric literal
012: true, // same (octal)
0xf: true, // same (hex)
"@": true, // not allowed as an identifier
'0a': true // same
}
Reference: http://es5.github.com/#x11.1.5.
PropertyName :
IdentifierName
StringLiteral
NumericLiteral