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"}