雷达智富

首页 > 内容 > 程序笔记 > 正文

程序笔记

javascript || 逻辑或 非布尔值用法

2024-09-01 48

Logical OR (||) 概念

当且仅当其一个或多个操作数为真时,一组操作数的逻辑或 (||) 运算符(逻辑析取)为真。 它通常与布尔(逻辑)值一起使用。 如果是,它返回一个布尔值。 然而,|| 运算符实际上返回指定操作数之一的值,因此如果此运算符与非布尔值一起使用,它将返回一个非布尔值。

Logical OR (||) 语法

expr1 || expr2

如果 expr1 可以转换为 true,则返回 expr1; 否则,返回 expr2。

如果一个值可以转换为 true,那么这个值就是所谓的 truthy。 如果一个值可以转换为 false,则该值就是所谓的 falsy。

可以转换为 false 的表达式示例如下:

null;

NaN;

0;

empty string ("" or '' or ``);

undefined.

尽管 || 运算符可以与不是布尔值的操作数一起使用,它仍然可以被认为是布尔运算符,因为它的返回值总是可以转换为布尔基元。 要将其返回值(或任何一般表达式)显式转换为相应的布尔值,请使用双 NOT 运算符 (en-US) 或布尔 (en-US) 构造函数。

短路评估

逻辑 OR 表达式从左到右求值,使用以下规则测试可能的“短路”求值:

(some truthy expression) || expr 被短路计算为真值表达式。

短路意味着上面的 expr 部分未被评估,因此这样做的任何副作用都不会生效(例如,如果 expr 是一个函数调用,则调用永远不会发生)。 发生这种情况是因为运算符的值在对第一个操作数求值后就已经确定了。 例子:

function A(){ console.log('called A'); return false; }
function B(){ console.log('called B'); return true; }

console.log( B() || A() );
// logs "called B" due to the function call,
// then logs true (which is the resulting value of the operator)

运算符优先级

以下表达式可能看起来是等价的,但实际上它们不是,因为 && 运算符在 || 之前执行 运算符。

true || false && false      // returns true, because && is executed first
(true || false) && false    // returns false, because operator precedence cannot apply

一些例子

以下代码显示了 || 的示例 (逻辑或)运算符。

o1 = true  || true       // t || t returns true
o2 = false || true       // f || t returns true
o3 = true  || false      // t || f returns true
o4 = false || (3 == 4)   // f || f returns false
o5 = 'Cat' || 'Dog'      // t || t returns "Cat"
o6 = false || 'Cat'      // f || t returns "Cat"
o7 = 'Cat' || false      // t || f returns "Cat"
o8 = ''    || false      // f || f returns false
o9 = false || ''         // f || f returns ""
o10 = false || varObject // f || object returns varObject


更新于:2个月前
赞一波!

文章评论

评论问答