JavaScript报错Uncaught ReferenceError: age is not defined:为何orxan[age]无法运行而orxan.age可正常工作?
为什么
orxan[age]报错,而orxan.age能正常工作? 这是个非常常见的JavaScript属性访问误区,咱们把问题拆解开来说清楚:
两种属性访问方式的核心差异
JavaScript对象有两种访问属性的方式,它们的工作逻辑完全不同:
点表示法(
.)
当你写orxan.age时,.后面的age是一个属性名字面量——JavaScript会直接把它当作字符串"age",去orxan对象里匹配同名属性。这正好对应你构造函数里定义的this.age,所以能顺利拿到值30。方括号表示法(
[])
方括号里的内容会被当作表达式执行:如果是变量,JavaScript会先去当前作用域查找这个变量的值,再用这个值作为属性名去对象里查找。
你代码里的orxan[age],JavaScript会先找名为age的变量,但你的作用域里从来没定义过这个变量(构造函数的age是局部参数,函数执行完就不存在了),所以直接抛出了Uncaught ReferenceError: age is not defined。
如何用方括号正确访问age属性?
有两种正确的写法:
- 直接把属性名写成字符串字面量:
console.log(orxan["age"]); // 输出30,和orxan.age效果一致 - 先定义变量存储属性名字符串:
let ageKey = "age"; console.log(orxan[ageKey]); // 同样输出30
一句话总结
点表示法适合属性名固定且是合法标识符的场景;方括号表示法更灵活,适合属性名是变量、包含特殊字符(比如orxan["user-age"])或者动态生成的情况。
内容的提问来源于stack exchange,提问作者Orxan Ulfatli
相关产品推荐
相关产品推荐

