js里很实用的操作符,你可能不知道 ?.和 ??

142 阅读1分钟

js里很实用的操作符,你可能不知道 ?.和 ??

空值合并操作符??

  只有当左侧为null和undefined时,才会返回右侧的数

  空值合并操作符(??)是一个逻辑操作符,当左侧的操作数为null或者undefined时,返回其右侧操作数,否则返回左侧操作数。

  与逻辑或操作符(||)时返回右侧操作数。也就是说,如果使用 || 来为某些变量设置默认值,可能会遇到意料之外的行为。

const foo = null ?? '默认值1';
console.log(foo); // "默认值1"

var num = 0 ?? 42;
console.log(num); // 0  (左侧不是null和undefined)
const nullValue = null;
const valA = nullValue ?? "valA 的默认值"; // (左侧为null 选右侧的值)
console.log(valA); // "valA 的默认值";

const emptyText = ""; // 空字符串,是一个假值,Boolean("") === false;
const valB = emptyText ?? "valB 的默认值" ; 
console.log(valB); // "" ; (空字符串虽然是假值,但不是 null 或者 undefined)

const Numbers = 42;
const valC = Numbers ?? 0; // (Numbers不是null和undefined)
console.log(valC); // 42

可选链操作符( ?. )

可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空null或者undefined的情况下不会引起错误,该表达式短路返回值


var obj = {
    vals:{
         name:"张三"
    }
}
 
console.log(obj.vals.name) // 张三

console.log(obj?.value?.name) // 使用链式操作:undefined
console.log(obj.value.name) // 报错: VM262:1 Uncaught TypeError: Cannot read properties of undefined (reading 'name')

空值合并操作符,可以在使用可选链时设置一个默认值:

let customer = {
  name: "Carl",
  details: { age: 123 }
};

let customerCity = customer?.nums ?? "早上好";
console.log(customerCity);  // "早上好"