![](/img/trans.png)
[英]Immutability - Accessing JavaScript number with object bracket notation
[英]Accessing javaScript object using [ ] notation
下面有什么区别:
var ourDog = {
"name": "Camper"
};
和
var ourDog = {
name: "Camper",
};
以及在两种情况下如何为我们的ourDog["name"]
返回Camper 。
当我们使用[]
表示法访问对象属性时,幕后是否发生任何转换?
检查规格
PropertyDefinition:PropertyName:AssignmentExpression
- 返回PropertyName的PropName。
规范的这一部分建议了属性名称及其值的形式语法。
此外,在此之前, 规范的这一部分建议propertyName可以是literalPropertyName
,而无需描述为string 。
PropertyName [Yield]:
LiteralPropertyName
ComputedPropertyName [?Yield]
LiteralPropertyName:
标识符名称
字符串字面量
数字文学
这就是为什么name
和"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
};
http://ecma-international.org/ecma-262/6.0/#sec-object-initializer
属性名称只能是标识符名称(即标识符+保留字),字符串文字或数字文字。
您不能使用带点符号的数字文字,但是括号符号有效:
var ourDog = {
123: "Camper",
};
输出量
ourDog[123] // Camper
但
ourDog.123 // SyntaxError
有关更多信息,请查看此
属性名称必须是字符串。 这意味着非字符串对象不能用作对象中的键。 通过toString方法将任何非字符串对象(包括数字)类型转换为字符串
var object = {};
object['1'] = 'value';
console.log(object[1]);
由于将1类型转换为“ 1”,因此将输出“值”。
示例来自MDN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.