繁体   English   中英

使用[]表示法访问javaScript对象

[英]Accessing javaScript object using [ ] notation

下面有什么区别:

var ourDog = {
    "name": "Camper"
};

var ourDog = {
    name: "Camper",
};

以及在两种情况下如何为我们的ourDog["name"]返回Camper

当我们使用[]表示法访问对象属性时,幕后是否发生任何转换?

检查规格

PropertyDefinition:PropertyName:AssignmentExpression

  1. 返回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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM