javascript中使用| |运算符初始化对象
有时我在javascript代码中看到如下内容:javascript中使用| |运算符初始化对象,javascript,Javascript,有时我在javascript代码中看到如下内容: var myObj = myObj || {}; 那么,这里到底发生了什么?我想| |运算符返回true或false,但它不正确 如果|运算符的计算结果为true,则返回左操作数,否则返回右操作数。换句话说,a | | b相当于a?a:b除了a只计算一次之外。这将初始化myObj,除非它已经定义。| |是一个短路操作员。如果第一个操作数的计算结果为true,则不计算第二个操作数 因此JSa | | b有点像c#a??b如果myObj未定义或为空
var myObj = myObj || {};
那么,这里到底发生了什么?我想| |运算符返回true或false,但它不正确 如果
|
运算符的计算结果为true,则返回左操作数,否则返回右操作数。换句话说,a | | b
相当于a?a:b
除了a
只计算一次之外。这将初始化myObj,除非它已经定义。| |是一个短路操作员。如果第一个操作数的计算结果为true,则不计算第二个操作数
因此JS
a | | b
有点像c#a??b
如果myObj
未定义或为空,则它将计算|
右侧的表达式,该表达式将创建一个新的空对象
所以myObj
如果不为null,则为myObj;如果myObj为null,则为空对象
我希望您理解我的意思OR op(| |)将返回第一个非空/假参数
在指定的情况下,如果myObj为false或null,它将被设置为空对象(使用{}括号创建对象)您可以使用此构造来获取非
null
,未定义的对象,等。这用于以后在代码中使用myObj
的情况,该代码要求它是一个对象。如果由于某种原因,myObj
在此行之前未定义,则重新分配它会使其未定义
或null
,在这种情况下,它将被分配{}
您可以将其视为:
// 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 = {};
为了理解| |运算符,让我们首先看一个相当基本的示例。逻辑OR运算符可用于为定义的变量提供默认值,如下所示:
var bar = false,
foobar = 5,
foo = bar || foobar; // foo = 5
在这种情况下,只有当bar被认为是falsy时,才会为foo分配foobar的值。falsy值可以被视为等于0、false、undefined、null、NaN或空(例如“”)。+1在JavaScript中也称为null合并运算符否,它只能用作C#的null合并运算符(??
)的替换项:)我从未听说过|
称为“空合并运算符”;它始终是“逻辑or”运算符。根据OP之前的问题,他来自ASP.NET背景,这就是为什么要进行此澄清。此外,如果myObj
的值为false或0或NaN或空字符串,也会导致变量随后被分配一个新对象。它不仅仅是未定义或空的。JavaScript中有6个错误。@Ray Toal:谢谢你的添加