javascript - Javascript - 使用括号属性检索对象属性并获得未定义
问题描述
我正在学习使用构造函数方法创建 Javascript 对象,但我无法理解其中一个示例中构造函数的一个小行为。
<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);
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>
我读到可以使用点运算符或括号运算符访问对象属性。这里的括号运算符似乎工作正常。现在我无法理解这里的两件事。
user[name]
正在回归undefined
。为什么undefined
?user[age]
什么都不返回。为什么它undefined
不像以前的情况那样返回?我在这里想念什么?
解决方案
当你这样做
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
必须始终是一个字符串,如果您不期望它可能会导致奇怪的错误。
推荐阅读
- php - 关系查询未定义方法
- python - Python中自定义的Dijkstra算法
- github-actions - 如何在另一个工作流程中下载工件/发布资产
- ios - 如何更新 iPad 拆分视图上的窗口框架?
- linux - 无法在 Ubuntu 容器中执行 .run 文件
- javascript - React 过滤大型数据集而不重新渲染(重新渲染过多错误)
- python - Python 相当于 Matlab 的“什么”功能?
- arrays - 重新调整数组后如何将数组写入一系列单元格?
- flutter - Flutter 无法从 master 切换到 dev 通道
- python-3.x - 如何抓取表格及其链接