ECMAScript 2021(ES12)是 JavaScript 的最新版本,于 2021 年 6 月正式发布。它引入了许多新的语法和特性,这些特性可以帮助开发者更加高效地编写 JavaScript 代码。本文将介绍其中三个特性:链式 Nullish 合并、对象赋值问题和可选的 chaining。
链式 Nullish 合并
链式 Nullish 合并是一种新的运算符,它用于合并两个值,并返回其第一个非空值。它的语法是 a ?? b
,其中 a
和 b
是任意表达式。
在 JavaScript 中,常常需要检查一个变量是否为 null 或 undefined。在以前的版本中,我们通常使用 ||
运算符来做这件事。例如,如下代码:
const foo = null || 'default value'; console.log(foo); // 输出:'default value'
这段代码的意思是:如果 foo
是 null 或 undefined,那么 foo
的值为 'default value'
。但是,这种写法会存在一些问题,比如当 foo
的值为 ''
或 0
时,也会被认为是 falsy(假值)。
链式 Nullish 合并运算符解决了这个问题。它只对 null 和 undefined 进行操作,不对其他 falsy 值进行操作。例如,如下代码:
const foo = null ?? 'default value'; console.log(foo); // 输出:null const bar = '' ?? 'default value'; console.log(bar); // 输出:'' const baz = 0 ?? 'default value'; console.log(baz); // 输出:0
可以看到,链式 Nullish 合并只对 null 和 undefined 进行操作,不对其他 falsy 值进行操作。
对象赋值问题
对象赋值问题是指在 JavaScript 中,当我们想要将一个对象的属性赋值到另一个对象上时,往往需要用到 Object.assign() 方法。例如,如下代码:
const destination = { a: 1 }; const source = { b: 2 }; Object.assign(destination, source); console.log(destination); // 输出:{ a: 1, b: 2 }
这段代码的意思是:将 source
中的属性复制到 destination
中,如果 destination
中已经存在同名属性,则覆盖它。
在 ECMAScript 2021 中,我们可以使用更加简单的语法来实现这个功能。例如,如下代码:
const destination = { a: 1 }; const source = { b: 2 }; const result = { ...destination, ...source }; console.log(result); // 输出:{ a: 1, b: 2 }
这段代码的意思是:先将 destination
中的所有属性复制到 result
中,然后再将 source
中的所有属性复制到 result
中。如果 result
中已经存在同名属性,则自动覆盖它。
可选的 chaining
可选的 chaining 是一种新的语法,它可以帮助我们在访问对象属性和方法时,避免出现 undefined 的错误。它的语法是 ?.
,例如:
-- -------------------- ---- ------- ----- ------ - - ----- ----- -------- - --------- ------ ----- ------ -- -- -------------------------- -- ------- --------------------------------------- -- -------- ------------------------- -- ------------ ------------------------------------- -- ------------
在这段代码中,如果 person
或 person.address
为 null 或 undefined,那么不会报错,而是直接返回 undefined。这样,我们就可以避免访问 undefined 的情况。
总结
ECMAScript 2021 引入了许多新的语法和特性,本文只介绍了其中三个:链式 Nullish 合并、对象赋值问题和可选的 chaining。这些特性可以帮助开发者更加高效地编写 JavaScript 代码,减少出错的概率。我们可以在实际编码中尝试使用这些特性,提高代码的效率和可读性。
示例代码
以下是一些示例代码,可以帮助读者更好地理解本文介绍的特性。
链式 Nullish 合并
const foo = null ?? 'default value'; console.log(foo); // 输出:null const bar = '' ?? 'default value'; console.log(bar); // 输出:'' const baz = 0 ?? 'default value'; console.log(baz); // 输出:0
对象赋值问题
const destination = { a: 1 }; const source = { b: 2 }; const result = { ...destination, ...source }; console.log(result); // 输出:{ a: 1, b: 2 }
可选的 chaining
-- -------------------- ---- ------- ----- ------ - - ----- ----- -------- - --------- ------ ----- ------ -- -- -------------------------- -- ------- --------------------------------------- -- -------- ------------------------- -- ------------ ------------------------------------- -- ------------
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66515202d3423812e44e732e