Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带管道的JavaScript变量_Javascript - Fatal编程技术网

带管道的JavaScript变量

带管道的JavaScript变量,javascript,Javascript,我在javascript中找到了一个创建对象的代码。 但我显然不知道下面的代码到底做了什么 var a = a || {}; 请给出解释。将双管道视为逻辑OR 这几乎意味着,如果a有一个Javascript真实值,则将a重新分配给a,否则将分配一个新的对象引用。它将以下任一项设置为变量a的值: 如果存在且是基元类型,则为的当前值的副本 如果存在并且是复杂类型,则对的当前值的引用 如果不存在,则创建新对象 如果a未定义或为false,则设置a={}这里的第一步是理解它实际上是这样的: var a

我在javascript中找到了一个创建对象的代码。 但我显然不知道下面的代码到底做了什么

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 || {};