【发布时间】:2017-06-07 16:01:10
【问题描述】:
我试图了解点和方括号表示法之间的区别。在查看 SO 和其他一些网站上的各种示例时,我遇到了以下两个简单示例:
var obj = { "abc" : "hello" };
var x = "abc";
var y = obj[x];
console.log(y); //output - hello
var user = {
name: "John Doe",
age: 30
};
var key = prompt("Enter the property to modify","name or age");
var value = prompt("Enter new value for " + key);
user[key] = value;
alert("New " + key + ": " + user[key]);
如果在第三行中我将obj[x] 替换为obj.x,则第一个示例返回未定义的y。为什么不"hello"
但在第二个示例中,表达式user[key] 可以简单地替换为user.key,而不会出现任何异常行为(至少对我而言)。
现在这让我感到困惑,因为我最近了解到,如果我们想通过存储在变量中的名称访问属性,我们使用 [ ] 方括号表示法。
【问题讨论】:
-
查看整个对象,而不仅仅是您修改的属性。
-
obj.key表示obj的属性key(字面意思)。obj[key]表示其键存储在变量key的obj中的属性。有明显的区别。使用obj.key会覆盖相同的属性,因此您不能同时设置名称和年龄。只需使用console.log(obj)查看您的对象。name和age不会改变,您将拥有另一个无意义的属性key,其中包含一些数字或一些字符串。 -
@Xufox 感谢您抽出宝贵时间。这行真的帮助了我-“obj.key 表示 obj 的属性键(字面意思)。obj[key] 表示其键存储在 obj 的变量键中的属性。”有时人们会忽略非常明显的事情,除非有人以正确的方式引导和指出它们......所以非常感谢朋友。
标签: javascript syntax square-bracket