【问题标题】:assigning non-existent variable in javascript在javascript中分配不存在的变量
【发布时间】:2014-07-24 01:33:48
【问题描述】:

我发现了一行 JavaScript 代码,我不清楚它是如何工作的。假设window 对象之前没有设置任何app 属性:

var app = window.app || {};

问题是 - 为什么 JS 不会为不存在的 window 对象的 app 属性抛出任何 ReferenceError ,而是将 window.app 创建为 {} - 为什么?如果我执行以下行:

var a = b || {}

我收到ReferenceError: b is not defined,我没问题。此外,我确实理解 xxx || {} 表达式 - 如果它不是虚假的,它会返回第一个元素,否则返回第二个元素。例如,用空白对象初始化未定义的东西很有用(例如 JS 中的默认函数参数)。

【问题讨论】:

  • Not definedundefined 在 JS 中是两个不同的东西 :)
  • "相反,它将window.app 创建为undefined" - 您在哪里看到这种情况?上面的代码将创建window.app{}
  • @Ian 对不起,你是对的,一个错字 - 我已经更新了我的问题。
  • @tkoomzaaskz 啊,我明白了,没问题
  • @tkoomzaaskz 无处不在:ecma-international.org/ecma-262/5.1/#sec-8.6.1.

标签: javascript properties variable-assignment


【解决方案1】:

只有在尝试使用未声明的变量时才会出现引用错误,而对于未定义的属性则不会。

||如果左侧为真值则返回左侧,否则返回右侧。

window.app 未定义,所以它是一个假值。因此它返回右侧:{}

然后将 or 语句的计算结果分配给app

如果app 是全局变量(即未在函数内声明),则将创建window 对象的app 属性。这不是在测试中使用window.app 的结果。这就是全局变量的工作原理。

【讨论】:

  • 澄清:如果您尝试实际使用未定义的属性,您确实会收到错误...
  • 不,你没有。如果您从属性中获取undefined 值并尝试用它做某些 的事情,那么您会得到一个错误(但可能不是引用错误)。问题本身表明,尝试在其他地方分配该值不会出错。
  • 您的回答没有解释为什么{} 分配给应用程序...我还是不明白。
  • @tkoomzaaskz:但是在您的问题中,您声明“我确实理解 xxx || {} 表达式 - 如果它不是虚假的,它会返回第一个元素,否则返回第二个元素。初始化很有用例如用空白对象未定义的东西“你需要什么进一步的解释?
  • @Quentin:我们说的是同一件事:你是“做”,我是“使用”。分配一个合法的值(未定义)当然很酷,使用不存在的东西(通过进一步深入它或调用它的方法)并不酷。
猜你喜欢
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 2017-09-02
  • 1970-01-01
相关资源
最近更新 更多