var x = v || 10;
该运算符(“逻辑”或“短路” OR 运算符)通常会检查 的值v
,如果它是“假”值(即它会作为 if 语句中使用的条件失败),则10
成为值of x
,否则v
执行(如果10
是函数,则永远不会执行)。
undefined
, null
, 和0
都是变量可以保存的假值的例子(是的,即使是第一个),并且运算符(或 if 语句)会相应地起作用。相比之下,所有对象和数组(不包括空值)都是“真实”值,它允许这样的事情(在 Google Analytics 跟踪器代码中使用):
var _gaq = _gaq || []; // Makes a new array _gaq if it is not already there
然而,如果引用的变量甚至没有在作用域链中的任何地方声明,那么就会发生 JavaScript 异常。
避免这种情况的一种方法是从一开始就声明所有全局变量:
var iAmAGlobalVariable; // Holds the value undefined by default
如果这是不可能的,您应该使用typeof
运算符。它不会尝试评估其操作数,因此不会发生异常:
var x;
if(typeof v != 'undefined' && v) {
x = v;
} else {
x = 10;
}
或者更好的是,如果您知道该变量将是一个全局变量,则可以将其视为全局(窗口)对象的一个属性:
var x = window.v || 10;