1、非空运算符(??)
只有当左侧为null和undefined时,才会返回右侧的数,
?? 运算符允许我们在忽略错误值(如 0 和空字符串)的同时指定默认值。
非空运算符(??)是一个逻辑操作符,当左侧的操作数为 null或者 undefined时,返回其右侧操作数,否则返回左侧操作数。
与逻辑或操作符(||)不同,逻辑或操作符会在左侧操作数为假值时返回右侧操作数。也就是说,如果使用 || 来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如,'' 或 0)时。见下面的例子。
const foo = null ?? 'default string';
console.log(foo);
// "default string"
const baz = 0 ?? 42;
console.log(baz);
// 0
2、可选链操作符( ?. )
?.(可选链运算符)的“空”值指的是null或undefined
可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish) (null或者 undefined) 的情况下不会引起错误,仅仅只是不执行,该表达式短路返回值
const adventurer = {
name: 'lisi',
cat: {
name: 'muzi'
}
const name = adventurer.dog?.name;
console.log( name);
// undefined
const name = adventurer.cat?.name;
console.log( name);
// 'muzi'
3.??= 空赋值运算符
仅当值为 null 或 undefined 时,此赋值运算符才会赋值。
var x = null
var y = 5
console.log(x ??= y) // => 5
console.log(x = (x ?? y)) // => 5
4.!!双重否定运算符
JS 中的 !! 运算符在 JavaScript 中被称为双重否定运算符。
javascript 中的 !! 运算符将任何值转换为布尔值:
非零、非空字符串和对象为 true;
0、null、undefined、NaN 和空字符串'' 为 false。
它用于强制转换为布尔值、反转布尔值和实现惰性加载。
console.log(!!0); // false
console.log(!!1); // true
console.log(!!''); // false
console.log(!!"Hello"); // true
console.log(!!null); // false
console.log(!!undefined); // false
console.log(!!NaN); // false
console.log(!!{}); // true