JavaScript的??、?.、??=、&&、||、!、!!的含义和用法

109 阅读3分钟

一:??(空值合并运算符)

逻辑操作符,当左侧的操作数为null 或者undefined 时,返回其右侧操作数,否则返回左侧操作数。

?? 双问号后面是默认值(可常量、可变量)

const foo = null ?? 'default string';
console.log(foo);
// expected output: "default string"

const baz = 0 ?? 42;
console.log(baz);
// expected output: 0

const val = null;
const emptyText = ""; // 空字符串,是一个假值,Boolean("") === false
const valNumber= 42;

const valA = val?? "valA's default string";
const valB = emptyText ?? "valB's default string";
const valC = valNumber?? 0;

console.log(valA); // "valA 的默认值"
console.log(valB); // ""(空字符串虽然是假值,但不是 null 或者 undefined)
console.log(valC); // 42

注意:?? 不可在template里面写 可以在js中写

二:?.(可选链操作符)

允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。

?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空null或undefined的情况下不会引起错误,该表达式短路返回值undefined。与函数调用一起使用时,如果给定的函数不存在,则会返回undefined。

在javascript中如果一个值为null、undefined,直接访问下面的属性,会报 Uncaught TypeError: Cannot read properties of undefined 异常错误。

当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短更简明。在探索一个对象的内容时,如果不能确认哪些属性必定存在,可选链操作符也是很有帮助的。

const adventurer = {
  name: 'Alice',
  cat: {
    name: 'Dinah'
  }
};

const dogName = adventurer.dog?.name;
console.log(dogName);
// expected output: undefined

console.log(adventurer.someNonExistentMethod?.());
// expected output: undefined
var tableData
tableData.list = res ?. list ?? []
tableData.total = res ?. total ?? 0
ps(res是接口返回数据)

三:??=(空值赋值运算符)

当??=左侧的值为undefined、null时,才会把右侧的值赋给左侧,否则左侧不会被赋值

let a;
let b = '123';
let c = 'qwer'
a ??= b;// '123'
b ??= c;// '123'

四:|| (或运算)

只要"||"前面为true,无论"||"后面是true还是false,都返回"||"前面的值;

只要"||"前面为false,无论"||"后面是true还是false,都返回"||"后面的值。

"||"可以理解为获取表达式中的第一个true值对象,如果没有true值对象,则返回最后一个对象。

console.log(true || 1)  //打印true
console.log(true || 0)  //打印true

console.log(false || 1) //打印1
console.log(false || 0) //打印0

五:&& (与运算)

左侧true返回右侧,左侧false直接返回左侧

"&&"可以理解为获取表达式中的第一个false值对象,如果没有false值对象,则返回最后一个对象。

console.log(false && true)  //打印false
console.log(false && null)  //打印false

console.log(true && 1)  //打印1
console.log(true && false)  //打印false

// 妙用
 if(a===true){
    console.log(a等于true)
  }
  可以写成:a && console.log(a等于true)

六:!和!!

1、!可将变量转换成boolean类型,null、undefined和空字符串取反都为false,其余都为true。

!null=true

!undefined=true

!''=true

!100=false

!'abc'=false

2、!!常常用来做类型判断,在第一步!(变量)之后再做逻辑取反运算,判断变量a为非空,未定义或者非空串才能执行方法体的内容

var a;
if(a!=null&&typeof(a)!=undefined&&a!=''){
    //a有内容才执行的代码  
}
if(!!a){
    //a有内容才执行的代码...  
}
if (!!res.data) {}

参考链接

js中 ?? 和 ?.的涵义及用法

JS 中的逻辑运算符&&和||的区别 !和!!的区别及用法