ES11 中总结 whatwg/html 规范的主要变化
1. Nullish 合并运算符
在 ES10 中,我们已经看到了可选链运算符 ?.
的出现,这为我们在访问对象的属性或方法时提供了更好的方式。然而,在使用可选链运算符时,我们还会遇到一些繁琐的情况,其中之一就是当属性值为 undefined
或 null
时需要进行判断。为解决这种情况,ES11 引入了 Nullish 合并运算符 ??
,用于判断一个值是否为 null
或 undefined
,如果是的话就返回默认值。与 ||
运算符类似,但它不会把 0
和空字符串 ''
视为 nullish
值。
// 传统的判断方法 let value = null; let result = value !== null && value !== undefined ? value : 'default'; // 使用 Nullish 合并运算符 let value = null; let result = value ?? 'default';
2. 动态导入
在 ES6 中,我们已经有了静态导入和导出,但是我们无法在运行时(代码执行时)进行导入。在 ES11 中,我们可以使用动态导入语法 import()
实现动态加载。在实际应用中,我们可以根据不同的条件选择加载不同的模块,而不会把所有的代码打包到同一个文件中。
// javascriptcn.com 代码示例 // 动态导入示例 import('./module.js') .then(module => { // 向 module 传递参数或者调用它的方法 module.method(); }) .catch(error => { console.log('动态 import 异常:', error); });
3. String.prototype.replaceAll()
在 ES11 中,我们可以使用 replaceAll()
方法来替换字符串中所有的匹配项,而不仅仅是第一个匹配项。
// replaceAll() 示例 let str1 = "hello world, world is nice."; let str2 = str1.replaceAll("world", "js"); console.log(str2); // "hello js, js is nice."
4. Promise.any()
ES11 新增了一个全新的 Promise 方法 Promise.any()
,用于在多个异步任务中,只要其中一个任务成功就返回成功结果。
// Promise.any() 示例 let promise1 = new Promise((resolve, reject) => setTimeout(reject, 3000, 'error1')); let promise2 = new Promise((resolve, reject) => setTimeout(resolve, 1000, 'result2')); let promise3 = new Promise((resolve, reject) => setTimeout(resolve, 2000, 'result3')); Promise.any([promise1, promise2, promise3]) .then(result => console.log(result)) // 'result2' .catch(error => console.log(error)); // 这里不会被执行
5. 异常堆栈
在 ES11 中,我们可以捕获到错误的异常堆栈信息,而不仅仅是错误的消息。这对于开发人员在调试和排查错误时非常有用。
// 异常堆栈示例 try { console.log(a); // a 没有定义,会抛出 ReferenceError 错误 } catch (error) { console.log(error); // ReferenceError: a is not defined console.log(error.stack); // 记录异常的函数调用堆栈 }
6. 逻辑赋值运算符
在 ES11 中,我们可以使用逻辑运算符 &&=
和 ||=
来实现赋值操作。如果变量已经定义,则根据逻辑运算符的结果进行赋值操作。
// 逻辑赋值运算符示例 let a = null; let b = 1; a ||= 10; // a 的值为 10,因为 a 是 null b &&= 2; // b 的值为 2,因为 b 是真值
总结
以上就是 ES11 中总结 whatwg/html 规范的主要变化。从工程师的角度来看,这些更新给开发者带来了很多便利,例如更好地处理空值、动态导入、异常堆栈等等。我们可以通过这些新特性提高代码的可读性和可维护性,减少开发过程中的繁琐处理,提高开发效率。在日常工作中,我们应该灵活结合这些新特性,从而更好地完成我们的任务。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/652ce1da7d4982a6ebe6bb71