JavaScript面试题(36):逻辑运算符的与跟非的返回值

// 只要“||”前为falsy,返回“||”后面的值
// 只要“||”前为truthy,返回“||”前面面的值
// 只要“&&”前为falsy,返回“||”前面的值
// 只要“&&”前为truthy,返回“||”后面面的值
// “||”跟“&&”都遵从短路原则,也就是,只要确定前面的值,就可以确定返回值
// 这样处理可以节约计算资源,毕竟
// 或“||”的含义是其一为真即为真,否则为假
// 与“&&”的含义是两者为真才为真,否则为假
// 另外,
// “&&”先于“||”执行,同类运算符的话,从左到右执行
{
function stepper(stepMe){
  stepMe.forEach( item => {
    let result = eval(item)
    console.log(`${item} ===> ${result}`)
  } )
}

const OR = [
  "1 || 2"
  , "0 || 1"
  , "false || false"
  , "0 || 0"
  , "false || 0"
  , "NaN || NaN"
  , "NaN || null"
  , "null || NaN"
  , "null || null"
]

const AND = [
  "false && false"
  , "false && 0"
  , "0 && false"
  , "NaN && false"
  , "null && false"
  , "null && NaN"
  , "NaN && null"
]

stepper(OR)
stepper(AND)
}
// “&&”优先于“||”
console.log(1 || 'string' && 2)
// 上面的代码等于
// const andFirst = 'string' && 2
// console.log(1 || result)
console.log(0 || 1 || 2) // 1, 略
console.log(1 && 2 && 3) // 3, 略

via 孟坤博客via穆乙