2013-06-19 58 views

回答

43

访问成员.性质被称为点符号。使用[]访问它们被称为括号表示法

点符号仅与有效identifier names[spec]属性名的作品,所以基本上,这也将是一个有效的变量名(有效标识符,也看到What characters are valid for JavaScript variable names?)任何名义和任何reserved keyword [spec]。括号表示期望表达式可以计算为一个字符串(或可以强制为一个字符串),因此可以使用任意字符序列作为属性名称。字符串可以包含的内容没有限制。

实例:

obj.foo; // valid 
obj.else // valid, reserved keywords are valid identifier names 
obj.42 // invalid, identifier names cannot start with numbers 
obj.3foo // invalid,    "" 
obj.foo-bar // invalid, `-` is not allowed in identifier names 

obj[42] // valid, 42 will be coerced to "42" 
obj["--"] // valid, any character sequence is allowed 
obj[bar] // valid, will evaluate the variable `bar` and 
      // use its value as property name 

使用括号标记:

  • 当属性名称包含在一个变量,例如obj[foo]
  • 属性名称包含标识符中不允许使用的字符,例如或者包含空格或破折号(-),例如数字,或者包含空格或破折号(-),例如, obj["my property"]

使用点符号:在所有其他情况下。

虽然有关于保留关键字的注意事项。尽管规范允许将它们用作属性名称和点符号,但并非所有的浏览器或工具都尊重它(特别是较早的IE版本)。因此,我认为最好的解决方案是避免使用保留关键字来表示属性名称,或者如果不能使用括号表示法。


†:这也是为什么您只能使用括号表示法访问数组元素的原因。标识符不能以数字开头,因此不能只包含数字。

+0

作为你说标识符名称不能用数字开头,其他规则是什么,你可以申明或提供任何链接 –

+0

我已经在答案中提供了一个链接。点击“标识符名称”。 –

+0

另请参见http://stackoverflow.com/questions/1661197/valid-characters-for-javascript-variable-names。 –

6

你应该使用.当你知道属性

var object = {}; 
object.property = 'whatever'; 

的名字,当属性的名称包含在一个变量

var object = {}; 
var property = 'another-property'; 
object[property] = 'whatever'; 

由于@DCoder添加的某些对象使用[]如果不使用[]表示法,则不能访问属性,因为它们的名称会破坏语法。例如。命名classdefault,或数据 - 丙值

+3

几个例子会使这个答案真的很棒:) – Lix

+1

工作:D –

+0

另外,某些对象属性不能使用'[]'表示法访问,因为它们的名称会破坏语法。例如。名为'class','default'或'data-prop-value'的属性。 – DCoder

5

另外为什么不呢。运算符允许索引属性?我真的想要 充分的原因。谢谢。

好吧,如果这是可能的,考虑:

var a = 0.5; 

您是指数量0.5或访问次数的5元素? 请参阅:

Number.prototype[5] = 3; 

0[5] //3 
0.5 // 0.5 

如果您允许的语法0.5等于0[5],那么你怎么知道你是什么意思?

然而,可以使用数字直接与对象常量:

var a = { 
    0: 3, 
    1: 5 
}; 
0

两个点运算符和索引(括号符号)运算符被用来访问对象的属性。通常使用点运算符访问比较快,因为通过窗口访问变量的速度明显较慢。但是如果变量中有特殊字符 ,则不能使用点运算符,因为它会给出错误。对于这种情况,我们需要使用索引运算符并将变量名称作为字符串格式传递,表示未使用过的引号,否则会给出未定义的错误。 例如 -

var abc = { 
    font-size : "12px" 
} 
Using dot operator - abc.font-size;   //it will give error (Incorrect) 
Using index operator - abc["font-size"];  //12px (Correct) 
相关问题