一、|| 和 ??
||
eg:var a = obj || {}
代表 obj != 0 || obj === "" || obj != false || obj != null || obj != undefined
时a = obj,否则a={}
??
eg:var a = obj ?? {}
代表 obj != null || obj != undefined
时a = obj,否则a={}
二、! 和 !!
!代表取反,例如!null=true !undefined=true !''=true !100=false !'abc'=false
!!是类型判断,例如
if(a!=null&&typeof(a)!=undefined&&a!=''){
//a有内容才执行的代码
}
可以写成
if(!!a){
//a有内容才执行的代码...
}
三、?.、??=
?.
let a;
let b = a.name;
因为a下面没有name,所以这样写页面会报错,这时我们可以运用?.
叫做可选链,让你有选择性,
let a;
let b = a?.name;
意思就是,只有当a存在,同时a具有name属性的时候,才会把值赋给b,否则就会将undefined赋值给b.重要的是,不管a存在与否,这么做都不会报错.
??=
叫做空值赋值运算符,顾名思义就是当值为空值是才会赋值,也就是值为null、undefined。否则将不会赋值,还是等于原来的值。
let b = '你好';
let a = 0
let c = null;
let d = ’123‘
b ??= a; // b = “你好”
c ??= d // c = '123'
四、||和&&
width>maxWidth && (width=maxWidth)
;
比如这行代码的意思就相当于
if(width>maxWidth){
width=maxWidth
}
js中的&&和||本质是什么呢?
&& 和 || 的作用只有一个(定义):
进行布尔值的且和或的运算。当运算到某一个变量就得出最终结果之后,就返回哪个变量。
在javascript中:
以下内容会被当成false处理:"" , false , 0 , null , undefined , NaN
其他都是true。注意:字符串"false"也会被当做true处理,在未转型的情况下他是字符串,属于一个对象,所以是true。
所以:
a || b:如果a是true,那么b不管是true还是false,都返回true。因此不用判断b了,这个时候刚好判断到a,因此返回a。
如果a是false,那么就要判断b,如果b是true,那么返回true,如果b是false,返回false,其实不就是返回b了吗。
a && b:如果a是false,那么b不管是true还是false,都返回false,因此不用判断b了,这个时候刚好判断到a,因此返回a。
如果a是true,那么就要在判断b,和刚刚一样,不管b是true是false,都返回b。