最近在看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)。
!(非) 逻辑非运算符接受一个参数
- 将操作数转化为布尔类型:
true/false。 - 返回相反的值。
两个非运算 !! 有时候用来将某个值转化为布尔类型:
!!"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教程 ,感兴趣的各位可以移步观看。