可选链运算符(?.)以及空值合并运算符(??)的使用

可选链运算符?.

可选链运算符?.)允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 . 链式运算符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined。

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

比如:

const star={
    name:'lym',
    age:18,
    hobby:{
        name:'wjk',
        age:20,
        sex:'男'
    }
}
const a = star.buddy?.name
console.log(a)  // undefined
console.log(star.method?.()) // undefined

语法:

obj.val?.prop
obj.val?.[expr]
obj.func?.(args)

空值合并运算符(??)

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

逻辑或运算符(||)不同,逻辑或运算符会在左侧操作数为假值时返回右侧操作数。也就是说,如果使用 || 来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如,'' 或 0)时。见下面的例子。

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

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

语法:

leftExpr ?? rightExpr
const nullValue =null;
const emptyText ="";// 空字符串,是一个假值,Boolean("") === false
const someNumber =42;
const valA = nullValue ?? "valA 的默认值";
const valB = emptyText ?? "valB 的默认值";
const valC = someNumber ?? 0;

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

给变量赋默认值

|| 是一个布尔逻辑运算符,左侧的操作数会被强制转换成布尔值用于求值。任何假值(0, '', NaN, null, undefined)都不会被返回。这导致如果你使用0,''或NaN作为有效值,就会出现不可预料的后果。

let count = 0;
let text = "";

let qty = count || 42;
let message = text || "hi!";
console.log(qty);     // 42,而不是 0
console.log(message); // "hi!",而不是 ""

空值合并运算符可以避免这种陷阱,其只在第一个操作数为null 或 undefined 时(而不是其他假值)返回第二个操作数

let myText = ''; // An empty string (which is also a falsy value)

let notFalsyText = myText || 'Hello world';
console.log(notFalsyText); // Hello world

let preservingFalsy = myText ?? 'Hi neighborhood';
console.log(preservingFalsy); // '' (as myText is neither undefined nor null)

你可能感兴趣的:(javascript,前端,vue.js,html,css)