【问题标题】:why referencing non-existent property of an object in javascript doesn't return a reference error?为什么在 javascript 中引用对象的不存在属性不会返回引用错误?
【发布时间】:2013-10-19 12:31:57
【问题描述】:

如果我尝试引用一个不存在的变量,我会在 JavaScript 中得到 ReferenceError。为什么引用不存在的对象属性会返回“未定义”? 这是一些代码,前提是我在浏览器中编写它:

alert(a);
ReferenceError: a is not defined //error is thrown
alert({}.a)
undefined //no error

【问题讨论】:

  • 你能发布一些代码吗?如果我是一个赌博的人,我会说它确实存在,但要么是空的,要么是空的。你用控制台调试过吗?
  • 你在问为什么语言是这样设计的? @MikeHometchko - 我敢打赌:不存在的属性会返回undefined,而null 的属性会返回null(如果“空”是指一个空字符串,那么它会返回一个空字符串);更令人困惑的是,确实存在但已分配值 undefined 的属性也返回 undefined
  • @nnnnnn 我觉得他是……
  • @nnnnnn 您还有 1 分钟的时间来进一步扩展您的评论……去吧,去吧,去吧! :D
  • @nnnnnn 哇,这很奇怪,我从来没有注意到这一点。 +1 对 OP 将我从矩阵中唤醒,我的生活一直是个谎言!

标签: javascript


【解决方案1】:

这就是语言的工作原理。它基于对象的方法非常灵活,您可以在运行时动态地添加、更新和删除对象的属性。访问当前不存在的应该产生undefined 而不是引发异常。例如,这允许在单个表达式中检查存在和类型:

if (prop in obj && typeof obj[prop] == "function") obj[prop]();
// can be written shorter:
if (typeof obj[prop] == "function") obj[prop]();

您可以在不使用它的情况下获得价值。然后在大多数情况下使用undefined 会抛出异常。

相比之下,变量是在其作用域内静态声明的。访问一个未声明的变量总是一个错误,它合法地抛出ReferenceErrors。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2011-02-06
  • 1970-01-01
相关资源
最近更新 更多