javascript如何初始化对象使用数组

javascript如何初始化对象使用数组,javascript,arrays,object,syntax,Javascript,Arrays,Object,Syntax,但这没关系 > a = ["key","value"] ["key", "value"] > o = {a[0]:a[1]} SyntaxError: Unexpected token [ 浏览器版本:Chrome 37.0.2062.124 m 为什么出现语法错误? 这里是否引入了一个新的背景?我不熟悉ECMA规范。根据,对象文字的定义如下 > o = {} Object {} > o[a[0]] = a[1]; "value" > o Object {key:

但这没关系

> a = ["key","value"]
["key", "value"]
> o = {a[0]:a[1]}
SyntaxError: Unexpected token [
浏览器版本:Chrome 37.0.2062.124 m

为什么出现语法错误? 这里是否引入了一个新的背景?我不熟悉ECMA规范。

根据,对象文字的定义如下

> o = {}
Object {}
> o[a[0]] = a[1];
"value"
> o
Object {key: "value"}
ObjectLiteral:
{ }
{PropertyNameAndValueList}
{PropertyNameAndValueList,}
PropertyName和ValueList:
财产转让
PropertyNameAndValueList,PropertyAssignment
物业签署:
PropertyName:AssignmentExpression
获取属性名称(){FunctionBody}
设置PropertyName(PropertySetParameterList){FunctionBody}
PropertyName:
识别名
StringLiteral
数字文字
PropertySetParameterList:
标识符
由于
[]
在任何
标识名
StringLiteral
NumericLiteral
中都是不允许的,因此JavaScript引擎无法解析代码。这就是它给出语法错误的原因

因此,要从数组中实际创建具有键和值的对象,需要首先构造对象,然后分别指定属性,如下所示

> o = {}
Object {}
> o[a[0]] = a[1];
"value"
> o
Object {key: "value"}

在对象文字中,属性名称必须是标识符(
foo
)、字符串文字(
“foo”
)或数字文字(
1
)<代码>一个[0]不是这些

使用方括号语法向现有对象添加属性时,使用的表达式可以计算为字符串(这是
a[0]
所做的)

如果要使用表达式设置属性名称,则必须首先构造对象,然后在另一条语句中添加属性。

在ES6中,您有“计算属性名称”(请参阅):

这意味着,当您将
[Expression]
作为键编写时,将使用
StringLiteral
NumberLiteral
IdentifierName
代替。表达式将被计算并用作键

像这样:

PropertyName : See 12.2.6
    LiteralPropertyName
    ComputedPropertyName
LiteralPropertyName : See 12.2.6
    IdentifierName
    StringLiteral
    NumericLiteral
ComputedPropertyName : See 12.2.6
    [ AssignmentExpression ]
然而,请注意,ES6仍然不是到处都支持的。如果不支持此功能,只需在创建对象后指定值(如第二个示例中所示)

> a=["key", "value"]
["key", "value"]
> o={[a[0]]: a[1], [3*3]: "hello"}
Object {key: "value", 9: "hello"}