JavaScript 具有非布尔值的逻辑运算符(布尔强制)

示例

||从左到右读取的逻辑OR()将求值为第一个真实值。如果未找到真实值,则返回最后一个值。

var a = 'hello' || '';             // 一个='你好'
var b = '' || [];                  // b = []
var c = '' || undefined;           // c =未定义
var d = 1 || 5;                    // d = 1
var e = 0 || {};                   // e = {}
var f = 0 || '' || 5;              // f = 5
var g = '' || 'yay' || 'boo';      // g ='是'

&&从左至右读取逻辑AND(),将得出第一个虚假值。如果未找到错误值,则返回最后一个值。

var a = 'hello' && '';                  // 一个=''
var b = '' && [];                       // b =''
var c = undefined && 0;                 // c =未定义
var d = 1 && 5;                         // d = 5
var e = 0 && {};                        // e = 0
var f = 'hi' && [] && 'done';           // f ='完成'
var g = 'bye' && undefined && 'adios';  // g =未定义

例如,可以使用此技巧来为函数参数设置默认值(ES6之前)。

var foo = function(val) {
    // 如果val计算为falsey,则将返回“默认值”。
    return val || 'default';
}

console.log( foo('burger') );  // 汉堡包
console.log( foo(100) );       // 100
console.log( foo([]) );        // []
console.log( foo(0) );         // 默认
console.log( foo(undefined) ); // 默认

请记住,对于参数,0以及(在较小程度上)空字符串通常也是有效的值,应该可以将其显式传递并覆盖默认值,在这种模式下,它们将不会(因为它们是虚假)。