?? 空值合并运算符
解释:对,空值合并运算符就是两个问号,表示该属性是否是null和undefined,如果是就执行后续代码,如果不是就执行本身,返回第一个已定义的值(就是有就用自己的,没有就用后面的),识别false、0、空字符串时,表示有值,执行本身;
let name = null;
let res = name ?? "MrZhang";
console.log(res); // "MrZhang"
//或者这样
let res = undefined ?? "MrZhang";
console.log(res); // "MrZhang"//当值是false、0、""时,表示有值,执行本省,
//当值是null和undefined时,才执行后续代码,返回第一个真值;
let name = false;
let res = name ?? "MrZhang";
console.log(res); // falsenull ?? 'hi' // 'hi' 2
undefined ?? 'hey' // 'hey' 2
false ?? 'hola' // false 1
0 ?? 'bonjour' // 0 1
"" ?? "hello" // "" 1
'first' ?? 'second' // first 1
|| 逻辑或(或者叫 或运算符)
解释:或运算符比较常用,顾名思义,表示不是它就是另一个,返回第一个真值,识别false、0、空字符串,还有null和undefined时,表示没有值,输出其它真值;
//正常情况下,输出第一个真值;
let name = "MrLiu";
let res = name || "MrZhang";
console.log(res); //MrLiu //当值时false、0、"" ,还有null和undefined时,选择其它真值;
let name = 0;
let res = name || "MrZhang";
console.log(res); //MrZhang
&& 逻辑与(或者叫 并且运算符)
解释:逻辑与 运算符也比较常用,表示并且,对符号两侧的值进行运算并返回结果,两个值中只要有一个值为false就返回false,只有两个值都为true时,才会返回true,如果第一个值为false,则不会看第二个值,如果两个都是true时,取后面的值;
let name = "MrZhang";
let res = name && false ;
console.log(res); // falselet name = "MrLiu";
let res = name && "MrZhang" ;
console.log(res); // "MrZhang"
&& || ?? 运算符优先级问题
//JS无法决定首先执行哪个操作符,需要使用括号来明确告知表达式的优先级,
//所以以下代码会首先执行括号内的表达式,最后输出Guest。
let firstName = null;
let lastName = undefined;
let username = (firstName || lastName) ?? "Guest";
console.log(username); // "Guest"
小结:
JavaScript 空值合并运算符,用双问号表示,这个运算符只会在左侧表达,是 null 或 undefined 时,返回右侧的表达式的真值;
空值合并运算符不同于或运算符,空值合并运算符会允许把0、false和空字符串识别为有效的数值;
在配合逻辑与 && 和逻辑或 || 使用时,先执行哪个,需加上括号,表明其优先级。
上一篇:js深浅拷贝