您好,登录后才能下订单哦!
在JavaScript中,?. 和 ?? 是两个相对较新的操作符,它们分别用于简化代码中的条件判断和默认值处理。这两个操作符在ES2020(即ES11)中被引入,极大地提升了代码的可读性和简洁性。本文将详细介绍它们的用法和适用场景。
?.可选链操作符(Optional Chaining Operator)?. 允许你在访问对象的属性或调用方法时,如果对象是 null 或 undefined,则不会抛出错误,而是返回 undefined。这个操作符的主要目的是简化对深层嵌套对象的访问,避免因为某个中间属性不存在而导致代码崩溃。
假设我们有一个嵌套的对象结构:
const user = {
name: 'Alice',
address: {
city: 'Wonderland',
zipcode: '12345'
}
};
如果我们想要访问 user.address.city,通常的写法是:
const city = user.address.city;
但如果 user 或 user.address 是 null 或 undefined,这段代码就会抛出错误:
const user = null;
const city = user.address.city; // TypeError: Cannot read property 'city' of null
为了避免这种情况,我们通常会使用条件判断:
const city = user && user.address && user.address.city;
这种写法虽然安全,但代码显得冗长且不易读。使用可选链操作符 ?.,我们可以简化这段代码:
const city = user?.address?.city;
如果 user 或 user.address 是 null 或 undefined,city 将会是 undefined,而不会抛出错误。
可选链操作符不仅可以用于属性访问,还可以用于函数调用:
const user = {
name: 'Alice',
greet() {
console.log(`Hello, ${this.name}`);
}
};
user.greet?.(); // 如果 user.greet 存在,则调用它
如果 user.greet 不存在,调用 user.greet?.() 不会抛出错误,而是静默地返回 undefined。
??空值合并操作符(Nullish Coalescing Operator)?? 用于在左侧的表达式为 null 或 undefined 时,返回右侧的默认值。与逻辑或操作符 || 不同,?? 只会在左侧的值为 null 或 undefined 时才会返回右侧的值,而 || 会在左侧的值为假值(如 0、''、false 等)时也返回右侧的值。
假设我们有一个变量 count,我们希望在其为 null 或 undefined 时,使用默认值 0:
const count = null;
const result = count ?? 0; // result 将会是 0
如果使用逻辑或操作符 ||,情况会有所不同:
const count = 0;
const result = count || 10; // result 将会是 10
在这个例子中,count 是 0,虽然它是一个有效的值,但 || 会将其视为假值,并返回右侧的 10。而使用 ?? 时,count 是 0,因此 result 将会是 0。
空值合并操作符特别适用于需要区分 null/undefined 和其他假值的场景。例如,在处理表单输入时,用户可能输入了 0 或空字符串 '',这些值在某些情况下是有效的,不应该被替换为默认值。
const input = document.querySelector('input').value;
const value = input ?? 'default';
在这个例子中,如果用户没有输入任何内容,input 将会是 ''(空字符串),?? 不会将其替换为 'default',而 || 会。
?. 和 ?? 的结合使用?. 和 ?? 可以结合使用,以处理更复杂的场景。例如,假设我们有一个嵌套的对象,我们希望访问某个属性,并在其为 null 或 undefined 时返回一个默认值:
const user = {
name: 'Alice',
address: {
city: 'Wonderland'
}
};
const city = user?.address?.city ?? 'Unknown';
在这个例子中,如果 user 或 user.address 是 null 或 undefined,city 将会是 'Unknown'。
?.:用于简化对深层嵌套对象的访问,避免因为某个中间属性不存在而导致代码崩溃。??:用于在左侧的值为 null 或 undefined 时,返回右侧的默认值,与 || 不同,它不会将其他假值(如 0、'' 等)视为无效。这两个操作符的引入使得JavaScript代码更加简洁、易读,尤其是在处理复杂的对象结构和默认值时,能够显著减少代码量并提高代码的健壮性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。