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未定义或为空

有时我在javascript代码中看到如下内容:

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:谢谢你的添加