wen*_*ner 3 javascript arrays syntax object
> a = ["key","value"]
["key", "value"]
> o = {a[0]:a[1]}
SyntaxError: Unexpected token [
Run Code Online (Sandbox Code Playgroud)
但这没关系
> o = {}
Object {}
> o[a[0]] = a[1];
"value"
> o
Object {key: "value"}
Run Code Online (Sandbox Code Playgroud)
浏览器版本:Chrome 37.0.2062.124 m
为什么语法错误?剂量在这里介绍一个新的背景?我不熟悉ECMA规范.
根据ECMA Script 5.1规范,Object Literal定义如下
ObjectLiteral :
{ }
{ PropertyNameAndValueList }
{ PropertyNameAndValueList , }
PropertyNameAndValueList :
PropertyAssignment
PropertyNameAndValueList , PropertyAssignment
PropertyAssignment :
PropertyName : AssignmentExpression
get PropertyName ( ) { FunctionBody }
set PropertyName ( PropertySetParameterList ) { FunctionBody }
PropertyName :
IdentifierName
StringLiteral
NumericLiteral
PropertySetParameterList :
Identifier
Run Code Online (Sandbox Code Playgroud)
由于[]
不允许任何IdentifierName
,StringLiteral
并且NumericLiteral
,JavaScript引擎无法解析代码.这就是它给出语法错误的原因.
因此,要实际使用数组中的键和值创建Object,您需要先构造Object,然后单独分配属性,如下所示
var newObject = {};
newObject[arr[0]] = arr[1];
Run Code Online (Sandbox Code Playgroud)
在对象文字中,属性名称必须是identifier(foo
),string literal("foo"
)或number literal(1
).a[0]
不是这些.
使用方括号语法向现有对象添加属性时,可以使用可以计算为字符串的表达式(a[0]
确实如此).
如果要使用表达式设置属性名称,则必须先构造对象,然后在另一个语句中添加该属性.