是下面有什么区别:访问JavaScript对象使用[]符号
var ourDog = {
"name": "Camper"
};
和
var ourDog = {
name: "Camper",
};
,以及它如何能够在这两种情况下返回露营为ourDog["name"]
。
当我们用[]
表示法访问对象属性时,场景后面是否发生了任何转换?
是下面有什么区别:访问JavaScript对象使用[]符号
var ourDog = {
"name": "Camper"
};
和
var ourDog = {
name: "Camper",
};
,以及它如何能够在这两种情况下返回露营为ourDog["name"]
。
当我们用[]
表示法访问对象属性时,场景后面是否发生了任何转换?
http://ecma-international.org/ecma-262/6.0/#sec-object-initializer
属性名称只能是一个标识符名称(即标识符+保留字),一个字符串文字或数字文字。
你不能用一个数字文本与点符号,但括号标记的工作原理:
var ourDog = {
123: "Camper",
};
输出
ourDog[123] // Camper
但
ourDog.123 // SyntaxError
更多信息,看看到this
属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象,包括一个数,经由toString方法
var object = {};
object['1'] = 'value';
console.log(object[1]);
该输出“值”类型强制转换成字符串,由于1类型强制转换到“1”。
实施例是从MDN
检查specs
PropertyDefinition:属性名:AssignmentExpression
- 的PropertyName的返回PROPNAME。
这部分规范建议使用它的值的属性名称的形式语法。
另外,在此之前this part of the spec建议propertyName可以是literalPropertyName
,不需要将其描述为字符串。
的PropertyName [产率]:
LiteralPropertyName
ComputedPropertyName [?产量]
LiteralPropertyName:
IdentifierName
串文字
NumericLiteral
这就是为什么你会得到相同的结果,两个name
的d "name"
。
但是,如果属性名称为first name
,那么您需要使用该字符串,否则您将收到编译错误,因为在属性名称后面有一个冒号:
。
//correct syntax
var ourDog = {
"first name": "Camper"
};
//incorrect syntax
var ourDog = {
first name: "Camper" //since after first there is no colon so there will be compilation error
};
感谢Gurvinder +1!如果你可以用简单的语言进一步描述,这将是非常有帮助的,发现有点难以理解为新手。 – blueMoon
简而言之,如果值是有效的原始值,那么JS引擎需要一个不带引号的文字属性名称,否则它需要用引号引起来。 – gurvinder372
可以使用括号记号如果对象'keys'是动态 – Arif
如果属性名称有一个空间,然后'变种ourDog = { “名”:“坎珀” };'那么就不会工作没有引号 – gurvinder372
我很清楚它的用法,我的疑问是它如何产生相同的结果对于这两个对象;我的意思是用引号和没有引号。 – blueMoon