一:??(空值合并运算符)
逻辑操作符,当左侧的操作数为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) {}
参考链接