3

我试图弄清楚为什么您可能会使用以下代码:

    var myObject = myObject || {};

我已经多次看到它使用过,但不明白为什么有必要这样做。感谢您的回复。

4

3 回答 3

4

人们称 JavaScript 的二进制或||默认运算符

var myObject = myObject || function(){};

是相同的

var myObject = myObject ? myObject : function(){};

以下代码

var AppSpace = AppSpace || {};

之所以使用,是因为要设置和使用命名空间的多个文件,如果命名空间已经创建,您不想覆盖它。这样,首先包含哪个文件都没有关系。

这是另一个违约的例子。

function doSomething (callback)  {
   something();
   code();      
   callback = callback || function() {};
   // Now we can call the callback even if it wasn't passed in.
   callback();         
}

但是,请注意以下问题。为什么 IE 使用 nuke window.ABC 变量?

也就是说,如果一个命名空间已经使用

window.AppSpace = {a: 1};

和另一个文件集

var AppSpace = AppSpace || {}

在IE中,如果两个脚本在不同的脚本标签中,它会将window.AppSpace的值覆盖为空对象,因为变量提升以及IE没有意识到这一点window.a并且var a在顶层都指向相同的事实多变的。

于 2012-09-14T18:19:22.073 回答
2

function(){} 是一个空类,因为类是 JavaScript 中的函数。这段代码特别利用了 JavaScript 中 OR 的提前退出 - 它评估第一项,如果它是真的,则将结果设置为等于该值,如果它是假的,则设置为等于第二项。因此,如果 myObject 为真(非空),则 myObject 等于该值,如果不是,则它等于一个空函数。

基本上,这段代码的意思是“如果 myObject 已经是某物,则将其保留在原处,否则使其等于此空白函数”。

于 2012-09-14T18:17:27.467 回答
0

这种技术称为“短路”评估。

hort-circuit 评估、最小评估或 McCarthy 评估表示某些编程语言中的一些布尔运算符的语义,其中第二个参数仅在第一个参数不足以确定表达式的值时执行或评估:当第一个参数AND 函数的参数计算结果为假,整体值必须为假;并且当 OR 函数的第一个参数计算结果为 true 时,整体值必须为 true

http://en.wikipedia.org/wiki/Short-circuit_evaluation

于 2012-09-14T20:18:19.917 回答