逻辑运算符和可选链和空值合并运算符

"!!"或 if 将表达式进行强制转化为 bool 值的运算,运算结果为 true 或者 false

注意:以下进行布尔值运算是为 false

  • undefined(未定义,找不到值时出现)
  • Null(代表空值)
  • False(布尔值的 false,字符串"false"布尔值为 true)
  • 0、-0(字符串"0"布尔值为 true)
  • NaN
  • “”(双引号)或’'(单引号) (空字符串,中间有空格时也是 true

逻辑或

console.log(true || true)   // true  
console.log(false || true)  // true  
console.log(true || false)  // true  
console.log(false || false || '') // ''

当第一项为 true 时,则返回第一项的值,后面的不做判断;
当第一项为 false 时,若后一项为 true,则返回后一项,若后一项为 false,则继续判断后一项,若全部为 false,则返回最后一项的值

其他用法:

let a={name:'苏'}  
console.log(1|| false || '') // 1  
console.log(0|| false || ' ') // ' '  
console.log(0|| a.name || ' ') // 苏

甚至能和表达式一起使用:

console.log(10 < 9 || '学徒') //学徒  
console.log(0 || '' || undefined || NaN || demo() + 1)//18  
function demo() {  
  return 17  
}

逻辑与

两个操作数都是真值时,与运算返回 true,否则返回 false

console.log( true && true );   // true  
console.log( false && true );  // false  
console.log( true && false );  // false  
console.log( false && false ); // false

多个操作数时:

let result = 6 && 8 && '苏苏'  
let result1 = 6 && 0 && '苏苏'  
let result2 = 0||undefined||NaN  
console.log(result)//苏苏  
console.log(result1)//0  
console.log(result2)//NaN

与运算 && 做了如下的运算:

  • 从左到右依次计算操作数。
  • 在处理每一个操作数时,都将其转化为布尔值。如果遇到某一个操作值为 false,则停止后面的判断,返回该操作数的初始值;
  • 如果所有的操作数进行布尔运算都为 true,则返回最后一个操作数。

注意:

  • 与运算 && 的优先级比或运算 || 要高
    所以代码 a && b || c && d  跟  &&  表达式加了括号完全一样: (a && b) || (c && d) `。

  • 非运算符 ! 的优先级在所有逻辑运算符里面最高,所以它总是在 && 和 || 之前执行。.

逻辑非运算符

逻辑非运算符接受一个参数,并按如下运作:

  1. 将操作数转化为布尔类型:true/false
  2. 返回相反的值。

**两个非运算 !! 有时候用来将某个值转化为布尔类型,等同于:Boolean 函数

console.log( Boolean("non-empty string") ); // true 
console.log( Boolean(null) ); // false

空值合并运算符

这是一个 es 2020 新出的一个特性。

当一个值既不是 null 也不是 undefined 时,我们将其称为“已定义的(defined), 此时,空值合并运算符户籍返回该值,否则返回最后面的值

你可能感兴趣的:(js,数学建模,javascript,开发语言)