我不知道以下声明的操作过程。
var x = x || {}; 我认为它所做的就是
如果存在x,则将其赋值为var x,如果不赋值为null。“未定义的\ null?”
为什么我们需要后面的“禁闭”部分?
一个链接到教训或很少的帮助将是grrreat!
发布于 2014-11-26 05:27:18
您可能知道||和&&是OR,并且在条件下。它们的工作方式是“短路评估”,这意味着||将停止计算,并在任何表达式(从最左边开始)计算为true时立即返回最后一个表达式。(换句话说:因为只有一个表达式是真的,所以只要其中任何一个都是真的,我们就可以立即停止。)另一方面,当任何表达式求值为false时,&&都会停止计算(因此,只要它的任何部分都是假的,整个复合词就不可能是真的)。换句话说,&&将继续评估这些术语,只要它们是true和||,只要这些术语是false。
现在,我们不仅可以在条件下使用这些操作符,而且可以在代码中的任何地方使用这些操作符。例如,a && b();等同于if-子句if (a) b();。类似地,||可以用于"is to“:a || b();相当于if (!a) b();。
由于||从计算结果为true的左侧返回第一个项的值,因此我们可以在右侧使用这个值,以便分配一个默认值(如果前面的项将计算给false):
a = b || c;等于
if (b) {
a = b;
}
else {
a = c;
}我们可以用任意数目的条件来做到这一点:
var api = window.webAPI || window.webkitWebAPI || window.mozWebAPI;(这将计算为假设的"window.webAPI",或者,如果未定义,则查找"webkitWebAPI“,然后查找”mozWebAPI“)。
在var x = x || {};的情况下,构造只是确保x是某种东西(显然是类似于对象的东西),如果不是,则使它成为一个空对象({})。它相当于if-子句。
var x;
if (!x) x = {};那我们为什么要用这个?显然,当第一次遇到时,它会将变量x初始化为空对象。但是它有条件地做到了这一点:如果x是在以前设置的,它就保留了x的值。此外,由于我们在同一子句中将x声明为变量,因此我们确保不会命中未声明的标识符(将额外的声明保存在另一行中)。
发布于 2014-11-26 03:34:40
null和undefined在任何地方都不涉及这个问题。
所有这些操作都是将x设置为{}值,如果x是"falsy“值的话。{}是一个空对象文本。
https://stackoverflow.com/questions/27140625
复制相似问题