我在jQuery中看到了具体的
var a= 'something' || function () {
}
或
var a = 'something' || { }
这是什么意思?我知道{}是javascript中的对象json,我知道javascript中的匿名函数,但仍然无法弄清楚这意味着什么。
感谢您的帮助。
答案 0 :(得分:3)
你很可能包含一个错误的例子。您的代码 有效,但编写起来没用,因为您要为变量分配一个已知字符串,这会使以下OR
语句无效。
常见的是这样的语法:
function foo(bar) {
// set baz to the contents of bar
// or create an empty object if bar evaluates to false
var baz = bar || {};
}
答案 1 :(得分:1)
这种“条件赋值”是语言中常见的习语,利用布尔运算符的短路(在本例中为“OR”)来为变量赋值左侧表达式的值(如果它)如果不是,则评估为“真实”值或右侧表达式。考虑:
var nullOrFive = null || 5; // => 5
左侧(null || five
)评估从左到右测试OR操作符的每个操作数,直到找到“真实”操作符,然后返回它。另一方面:
var tenOrWhatever = 10 || someMethodThatIsNeverCalled(); // => 10
所以在你的例子中,如果“something”的计算结果为true(除了“undefined”,“null”和JavaScript中为零),那么变量“a”将获得其值,否则它将获得该函数(function() {...}
)或对象文字({}
)。
答案 2 :(得分:1)
在为变量赋值时,JavaScript正在评估给定的表达式。
var s= s || {};
这意味着如果当前作用域中已存在名为s的变量,则新创建的s变量指向它。否则,如果s变量未在当前范围中定义,或者它指向空引用,或者指向其他值为FALSE的值,则新创建的s变量将指向新对象。当一个人在多个文件中扩展一个对象时,这很有用:
<强> File1中强>
var globalNamespace = globalNamespace || {};
globalNamespace.someVariable = "some value;"
<强>文件2 强>
var globalNamespace = globalNamespace || {};
globalNamespace.someFunction = function()
{
return this.someVariable;
};
通过这种方式,可以扩展globalNamespace对象,而不必担心代码被分散在多个文件中。
答案 3 :(得分:0)
在MDC上引用documentation,
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 = options || {}; 将选项放在变量o中;但如果选项未定义或为空,将确保o初始化为{}