我看到在 jQuery 中是具体的
var a= 'something' || function () {
}
或者
var a = 'something' || { }
这是什么意思?我知道 { } 是 javascript 中的对象 json 并且知道 javascript 中的匿名函数,但仍然无法弄清楚这意味着什么。
我在这里先向您的帮助表示感谢。
我看到在 jQuery 中是具体的
var a= 'something' || function () {
}
或者
var a = 'something' || { }
这是什么意思?我知道 { } 是 javascript 中的对象 json 并且知道 javascript 中的匿名函数,但仍然无法弄清楚这意味着什么。
我在这里先向您的帮助表示感谢。
您很可能包含了一个错误的示例。您的代码是有效的,但编写起来毫无用处,因为您正在将一个已知字符串分配给一个变量,这使得以下OR
语句无用。
常见的是这样的语法:
function foo(bar) {
// set baz to the contents of bar
// or create an empty object if bar evaluates to false
var baz = bar || {};
}
这种“条件赋值”是语言中的一种常见习惯用法,它利用布尔运算符的短路(如本例中的“OR”)将左侧表达式的值分配给变量,如果它评估为如果不是,则为“真”值或右手表达式。考虑:
var nullOrFive = null || 5; // => 5
左侧 ( null || five
) 评估从左到右测试 OR 运算符的每个操作数,直到找到“真实”的操作数,并将其返回。另一方面:
var tenOrWhatever = 10 || someMethodThatIsNeverCalled(); // => 10
因此,在您的示例中,如果“某物”的计算结果为真(在 JavaScript 中不是“未定义”、“空”和零),那么变量“a”将获得它的值,否则它会获得函数 ( function() {...}
) 或对象字面量 ( {}
)。
当为变量赋值时,JavaScript 正在评估给定的表达式。
var s= s || {};
这意味着如果当前范围内已经有一个名为 s 的变量,则新创建的 s 变量指向它。否则,如果 s 变量未在当前作用域中定义,或者它指向一个空引用,或者其他一些被评估为 FALSE 的值,那么新创建的 s 变量将指向一个新对象。当在多个文件中扩展一个对象时,这很有用:
文件 1
var globalNamespace = globalNamespace || {};
globalNamespace.someVariable = "some value;"
文件2
var globalNamespace = globalNamespace || {};
globalNamespace.someFunction = function()
{
return this.someVariable;
};
通过这种方式,可以扩展 globalNamespace 对象,而不必担心代码被吐在多个文件中。
引用MDC 上的文档,
Logical OR (||)
expr1 || expr2
Returns expr1 if it can be converted to true; otherwise, returns expr2.
Thus, when used with Boolean values, || returns true if either operand is true;
if both are false, returns false.
另外,还有一个短路评估:由于逻辑表达式是从左到右评估的,因此使用以下规则测试它们是否有可能的“短路”评估
因此,如果 expr1 可以评估为 true,则不会评估 expr2。
jQuery 使用大量这些短路评估来定义变量的默认值。例如。var o = 选项 || {}; 将选项放在变量 o 中;但如果选项未定义或为空,将确保 o 初始化为 {}