有时我会在javascript代码中看到类似这样的内容:
var myObj = myObj || {};
那么,这里究竟发生了什么?我想|| operator返回true或false,但它不正确。
答案 0 :(得分:28)
||
运算符如果计算结果为true,则返回左操作数,否则计算并返回右操作数。换句话说,a || b
相当于a ? a : b
,但a
仅评估一次。
答案 1 :(得分:5)
了解||运算符,让我们首先看一个相当基本的例子。逻辑OR运算符可用于为定义的变量提供默认值,如下所示:
var bar = false,
foobar = 5,
foo = bar || foobar; // foo = 5
在这种情况下,如果bar被认为是假的,foo将只被赋予foobar的值。假值可以被认为等于0,假,未定义,空,NaN或空(例如“”)。
答案 2 :(得分:2)
除非已定义,否则初始化myObj。
答案 3 :(得分:1)
||是一个短路运营商。如果第一个操作数的计算结果为true,则不计算第二个操作数。
因此JS a || b
类似于c#a ?? b
答案 4 :(得分:1)
OR op(||)将返回第一个非空/假参数。
在指定的情况下,如果myObj为false或null,则将其设置为空对象({}括号用于创建对象)
答案 5 :(得分:1)
您可以使用此构造来获取不是null
,undefined
等的对象。这用于稍后在需要它的代码中使用myObj
的情况成为一个对象。如果出于某种原因,myObj
在此行之前未定义,则重新分配该文件会使其保留undefined
或null
,在这种情况下,会为其分配{}
。< / p>
您可以将其视为:
// If the object is already defined
if (myObj)
var myObj = myObj;
// It was undefined or null, so assign an empty object to it.
else
var myObj = {};
答案 6 :(得分:0)
如果myObj
未定义或为null,则它会评估||
右侧创建新空对象的表达式
所以myObj
如果不是null则是myObj,如果myObj为null则是空对象
我希望你明白我的意思