ECMAScript 2021 优化 nullish coalescing 运算符
ECMAScript 2021 新增了一些特性,其中之一是更新了 nullish coalescing 运算符(??)。这种运算符常常用于处理 null 或 undefined 值的情况,让程序更容易地进行判断和逻辑控制。在 ECMAScript 2021 中,nullish coalescing 运算符做了一些优化,让使用它更为舒适和方便。
在 JavaScript 中,当我们想要判断一个变量是否为 null 或 undefined 时,通常会使用三元运算符(? :),例如:
----- --- - ----- ----- ------ - --- - --- - ----------
上面的代码中,我们先将 foo 值设为 null,然后使用三元运算符进行判断,如果 foo 为真(即不为 null 或 undefined),则返回 foo 的值,否则返回默认值 'default'。这种判断方法不仅繁琐,还容易出错,因此 ECMAScript 2020 引入了 nullish coalescing 运算符来简化代码,并且它在很多情况下比三元运算符更加简便。
nullish coalescing 运算符的基本用法是:
----- ------ - --- -- ----------
在上面的代码中,我们直接使用 ?? 运算符来对 foo 进行判断,如果 foo 为 null 或 undefined,则返回默认值 'default',否则返回 foo 的值。这样就减少了代码的复杂性,也让判断更为简单易懂。
然而,在 ECMAScript 2021 中,我们发现 nullish coalescing 运算符还有一些优化,它对一些特殊情况进行了更为细致的处理,以确保代码的正确性和可读性。
首先,我们来看一个特殊情况。在使用 nullish coalescing 运算符时,我们可能会遇到以下情况:
----- ---- - -- ----- ---- - --- ----- ------- - ---- -- ---------- -- - ----- ------- - ---- -- ---------- -- --
在上面的代码中,我们定义了两个变量 foo1 和 foo2,分别赋值为数字 0 和空字符串。然后我们对它们进行 nullish coalescing 运算符的判断,并设定默认值为 'default'。然而,输出的结果却是 0 和 '',而不是默认值 'default'。这是因为在 JavaScript 中,0 和空字符串是有意义的值,它们不属于 null 或 undefined,因此不会触发默认值的返回。
在 ECMAScript 2021 中,这个问题被修复了。现在,nullish coalescing 运算符会将 0 和空字符串视为无效值,与 null 或 undefined 相同。例如:
----- ---- - -- ----- ---- - --- ----- ------- - ---- -- ---------- -- - ----- ------- - ---- -- ---------- -- -- ----- ------- - ---- --- ---- -- ---- --- --------- - ---- - ---------- -- --------- ----- ------- - ---- --- ---- -- ---- --- --------- - ---- - ---------- -- ---------
在上述代码中,我们分别使用 nullish coalescing 运算符和三元运算符来进行判断。使用 nullish coalescing 运算符的结果是 0 和 '',使用三元运算符则输出默认值。可以发现,nullish coalescing 运算符现在已经完全符合我们对无效值的定义,更加准确和可靠。
另外一个更新是,nullish coalescing 运算符现在还支持链式赋值,例如:
--- --- - - ----- ------ ---- -- -- --- ------ - --------- -- ---------- -- -----
在这个示例中,我们定义了一个名为 obj 的对象,并给它设定了 name 和 age 属性。我们使用了问号运算符(?.)来确保对象存在,并且使用 nullish coalescing 运算符来对 name 属性进行赋值。如果 name 属性为 null 或 undefined,则返回默认值 'default'。这种链式赋值方式更加方便和简便,可以一次性判断多个属性或对象是否存在。
总结来说,ECMAScript 2021 优化了 nullish coalescing 运算符,以确保它对无效值的定义更加准确和可靠,并支持了链式赋值,使判断更为简便。使用它可以让我们避免更多的判断和处理,让代码更加简洁和易懂。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/664b1d59d3423812e4a0bbc2