在 ECMAScript 2021 中,逻辑运算符在严格模式下有了重大的变化。这篇文章将深入探讨这些变化,并给出相应的示例代码。
传统逻辑运算符的问题
在传统的 JavaScript 中,逻辑运算符“||”和“&&”都会返回它们的一个操作数。例如:
console.log(true || 1); // true console.log(false && 1); // false
在这种情况下,逻辑运算符的结果并不是一个严格的布尔值。这意味着我们可以在后续的代码中使用这些值,而不需要进一步的类型检查。
然而,这种行为会导致难以发现的错误。例如,以下代码将继续执行,即使“obj”为空:
var obj = null; if (obj && obj.property) { // ... }
这个问题可以通过使用严格的逻辑运算符来解决:
var obj = null; if (obj !== null && obj.property) { // ... }
这样做会确保“obj”确实包含一个值,而不是一个“假值”。
严格逻辑运算符的使用
在 ECMAScript 2021 中,我们可以使用新的逻辑运算符“??”和“?.”,这些运算符解决了传统逻辑运算符的问题,并且可以在严格模式下使用。
- “??” 运算符
“??” 运算符表示空位合并运算符。它的作用是将左操作数转换为布尔值,如果操作数为 null 或 undefined,则返回右操作数。否则返回左操作数。
例如:
var obj = null; var value = obj ?? "默认值"; console.log(value); // "默认值"
在这个例子中,“obj”为 null,因此“value”将被赋值为“默认值”。
- “?.” 运算符
“?.” 运算符表示可选链运算符。它的作用是判断一个变量是否为 null 或 undefined,如果是,则返回 undefined,否则返回指定的属性或方法。
例如:
var obj = null; var value = obj?.property?.method(); console.log(value); // undefined
在这个例子中,“obj”为 null,因此“value”将被赋值为 undefined,而不是抛出一个错误。
总结
ECMAScript 2021 中的逻辑运算符“??”和“?.”可以帮助我们在严格模式下更加安全地使用逻辑运算符。使用这些运算符可以避免由于隐式类型转换而导致的错误,并增强代码的可读性。
示例代码
以下是示例代码,用于演示“??”和“?.”运算符的使用:
-- -------------------- ---- ------- --- --- - - --------- - ------- ---------- - ------ ------- - -- -- --------- ------------------------ -- ----------------------- -- ----- -- --------- ------------------------------------- -- ----- --- ---- - ----- -- --------- ---------------- -- ------------- -- ------------------------ -- -------- ---------- ------ ---- -------- -------- -- ---- -- --------- -------------------------------------- -- ---------
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6493eccc48841e989417eb7f