这可能是重复的,但我不知道如何搜索它。
为什么
var test = test || {};
工作,但是
var test = testing || {};
抛出错误?在定义时,test
和 testing
均未定义。
编辑
抛出的错误是“引用错误:测试未定义”
最佳答案
undefined variable (即不存在的变量)与保存值未定义
的变量之间是有区别的。
在第一个示例中,您使用 var
声明 test
,这样当计算 =
右侧的表达式时,变量 test
存在,但值为 undefined
。
在第二个示例中,您根本没有定义testing
,因此出现错误。
编辑:我认为进一步的解释也许不会有什么坏处。
为了简化,JavaScript 引擎对代码进行了两次遍历。第一个阶段是解析/编译阶段,然后发生变量声明,但不发生赋值。第二遍是实际执行,然后进行赋值。这会产生一种通常称为“变量提升”的效果 - 就好像 JS 引擎将声明“提升”到其作用域的顶部,但仍然进行赋值。
至于这样的代码:
var test = test || {};
...它基本上是在说“test
是否已经存在并具有真值?如果是,则使用它,否则将其设置为一个新的空对象。”
JS 引擎不介意同一变量在同一作用域中声明多次 - 它基本上会忽略第二个声明,但不会忽略任何赋值 em> 包含在第二个声明中。因此,如果 test
在其他脚本 block 中声明,也许在单独的 JS 包含文件中,那么相关行只是将 test
分配给自身(假设它有一个真值) ,其中所有对象都是真实的)。但是,如果它尚未在其他地方声明,它仍然会作为当前 var
语句的结果而存在,但在当前赋值之前它将是 undefined
,因此 ||
运算符返回右侧操作数,即 {}
。
关于javascript - 分配现有或空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511029/