4 回答
TA贡献1982条经验 获得超2个赞
当你这样做
user[name]
这会查找存储在name
变量中的属性。例如,如果你有
const name = 'foo'; const result = user[name];
这相当于:
const result = user.foo;
因为foo
存储在name
变量中。
同样的事情正在发生age
。
相反,当您使用引号时,解释器不会查找变量名,它只使用纯字符串:
const result = user['foo']
相当于
const result = user.foo;
但是,请记住:最好避免使用该name
变量,因为在顶层,它window.name
必须始终是一个字符串,如果您不期望它可能会导致奇怪的错误。
TA贡献1864条经验 获得超2个赞
当你做 user[name]
你真正在做的事情是传递一个名为 name 的变量,因为你没有声明一个名为 name 的变量,你将得到未定义。
当您正在做user["name"]
您正在做的事情时,您正在告诉您要访问name
对象内部的密钥。
你也可以
user.name
它会返回相同的东西user['name']
TA贡献1868条经验 获得超4个赞
问题是当您编写user[name](假设名称为Daniel)时,您实际上是在尝试访问其键为Daniel有效键的值。如果这种情况Daniel是键的值name。尝试这样做。
document.getElementById("demo").innerHTML = user.name; // Return undefined
document.getElementById("demo").innerHTML = user["name"]; // Return Daniel.
document.getElementById("demo").innerHTML = user.age; // Return nothing. Blank
document.getElementById("demo").innerHTML = user["age"];
使用.name而不是[name]获取键的值name。
TA贡献1858条经验 获得超8个赞
您没有定义任何名称和年龄变量,因此user[name]和user[age]将是未定义的。
您需要定义变量var name = "name"并使用user[name]如下
<html>
<body>
<h2>JavaScript Objects</h2>
<p id="demo"></p>
<script>
function User(name,age){
this.name=name;
this.age=age;
}
var user = new User('Daniel',45);
var name = "name";
var age = "age";
document.getElementById("demo").innerHTML = user[name]; // Return undefined
document.getElementById("demo").innerHTML = user["name"]; // Return Daniel.
document.getElementById("demo").innerHTML = user[age]; // Retutn nothing. Blank
document.getElementById("demo").innerHTML = user["age"]; // Return 45
</script>
</body>
</html>
添加回答
举报