带管道的JavaScript变量
我在javascript中找到了一个创建对象的代码。 但我显然不知道下面的代码到底做了什么带管道的JavaScript变量,javascript,Javascript,我在javascript中找到了一个创建对象的代码。 但我显然不知道下面的代码到底做了什么 var a = a || {}; 请给出解释。将双管道视为逻辑OR 这几乎意味着,如果a有一个Javascript真实值,则将a重新分配给a,否则将分配一个新的对象引用。它将以下任一项设置为变量a的值: 如果存在且是基元类型,则为的当前值的副本 如果存在并且是复杂类型,则对的当前值的引用 如果不存在,则创建新对象 如果a未定义或为false,则设置a={}这里的第一步是理解它实际上是这样的: var a
var a = a || {};
请给出解释。将双管道视为逻辑OR
这几乎意味着,如果a有一个Javascript真实值,则将a重新分配给a,否则将分配一个新的对象引用。它将以下任一项设置为变量a的值: 如果存在且是基元类型,则为的当前值的副本 如果存在并且是复杂类型,则对的当前值的引用 如果不存在,则创建新对象
如果a未定义或为false,则设置a={}这里的第一步是理解它实际上是这样的:
var a;
a = a || {};
…如果变量a先前已在当前范围内声明,则var a为no op
因此,第一部分var a确保a作为变量存在,如果它还没有存在的话
第二部分说:如果a有一个真实的值,保持它,不要改变它。如果它有一个假值,则将{}赋值给一个
falsey值为0、NaN、null、未定义,当然还有false。真实的价值观是所有其他的
这是因为,与其他一些语言不同,它并不总是导致正确或错误;相反,它计算左操作数,如果是真的,则将该值作为其结果;否则,它将计算右操作数并将其作为结果。与普通的if-conditionbeen三元运算符一样,检查布尔值并赋值是短路或。代码将检查a是否为真。。如果不是,则为一个对象指定一个空对象。
var a;
a = a || {};