首页 > 解决方案 > 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>

我读到可以使用点运算符或括号运算符访问对象属性。这里的括号运算符似乎工作正常。现在我无法理解这里的两件事。

  1. user[name]正在回归undefined。为什么undefined
  2. user[age]什么都不返回。为什么它undefined不像以前的情况那样返回?我在这里想念什么?

标签: javascript

解决方案


当你这样做

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必须始终是一个字符串,如果您不期望它可能会导致奇怪的错误。


推荐阅读