var person = {name: "Johen", address: "USA"}
以下两种访问此人属性的方法之间是否存在差异?是否有任何性能影响?
var name = person.name
var address = person["address"]
谢谢!
答案 0 :(得分:2)
他们是平等的。如果密钥包含字符串外不允许的字符,则需要数组语法。如果你想使用动态密钥,同样适用 - 很久以前人们习惯使用像foo = eval('obj.' + propname);
那样凌乱的黑客,但foo = obj[propname];
当然要好得多
IMO obj.property
语法更好,因为它更短更自然。
答案 1 :(得分:0)
对象属性的“点”和“方括号”访问方法在ECMA-262第11.2.1节中描述。只有在名称符合标识符允许字符规则的有限情况下,才能使用点访问。
可以在从表达式计算名称的位置使用方括号表示法。它基本上是“评估表达式并将结果用作属性名称”,因此您可以执行以下操作:
function foo() {return 'foo'}
var obj = {};
obj[foo()] = 'foo';
以与对象属性完全相同的方式访问数组属性 - 数组只是具有特殊长度属性的对象。