js基础知识回顾(2)--运算符 或与非

715 阅读3分钟

最近在看js的一些比较基础的东西,自己记录一下自己觉得比较容易遗忘或者混淆的知识点,方便自己温习,不足的地方还望大家支出更正,感谢!!!

逻辑运算符

JavaScript 中有三个逻辑运算符:||(或),&&(与),!(非)。

或运算寻找第一个真值

result = value1 || value2 || value3;

  • 从左到右依次计算操作数。
  • 处理每一个操作数时,都将其转化为布尔值。如果结果是 true,就停止计算,返回这个操作数的初始值。
  • 如果所有的操作数都被计算过(也就是,转换结果都是 false),则返回最后一个操作数。 换句话说 : 一个或运算 || 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。

获取变量列表或者表达式中的第一个真值。

    1 || 0    //1
    null || 1 //1 
    
    let a = ''
        b = '',
        c = ''
       a || b || c || 'dang'    //dang   如果所有变量的值都为假,结果就是 dang。

短路求值

true || alert("dang") //   遇到 `true` 时立即停止运算
false || alert('dang')//dang  左侧的条件为假时才执行命令

&& 当两个操作数都是真值时

`result = value1 && value2 && value3;`
  • 从左到右依次计算操作数。
  • 在处理每一个操作数时,都将其转化为布尔值。如果结果是 false,就停止计算,并返回这个操作数的初始值。
  • 如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数。 换句话:与运算返回第一个假值,如果没有假值就返回最后一个值。
 1 && 5  // 5 
    null && 5 // null

优先级

与运算 && 的优先级比或运算 || 要高。

所以代码 a && b || c && d 跟 && 表达式加了括号完全一样:(a && b) || (c && d)

!(非) 逻辑非运算符接受一个参数

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

两个非运算 !! 有时候用来将某个值转化为布尔类型:

    !!"non-empty string"  //true
    !!null    //false

优先级

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

控制合并运算符 ??

空值合并运算符:??

定义:如果第一个参数不是 null/undefined,则 ?? 返回第一个参数。否则,返回第二个参数。

  let name 
  name ?? "dang"  //dang
  
  let nameOne
      nameTwo
      nameOne ?? nameTwo ?? "dang"  // 显示第一个已定义的值 如果都为定义或者为null 或者undefined  则返回最后的值

对比

|| 返回第一个真值

?? 返回第一个已定义的值

|| 无法区分false 、0、空字符串和null/undefined 都为假值

?? 只认为null、undefined为价值 假设开发中要设置一个宽高 初始值为0

let widht=0,
    height=0;
    height || 100 // 100
    height ?? 100 //0

显然??更符合语境

优先级

?? 运算符的优先级相当低 ?? 在 = 和 ? 之前计算,但在大多数其他运算符(例如,+ 和 *)之后计算。需要考虑加括号

let height = null;
let width = null; 

let area = (height ?? 100) * (width ?? 50); //使用括号
area// 5000

Switch

 let b = 1;
 switch (a) {
        case '1' : //switch的参数a和case的条件对比是"==="对比,严格对比 所以区别数字1或者字符串1
            console.log(a)
            break;
         case 1  :
            console.log(a)
            break; 
          case 2:  //case 分组 相同条件的进入这个分支
          case 3:
             console.log(a)
            break; 
           case b+1: //case条件可以使表达式
             console.log(a)
            break; 
    }

素材资料来自 现代 JavaScript教程 ,感兴趣的各位可以移步观看。