在前端开发中,JavaScript 是一门非常重要的编程语言。随着时间的推移,JavaScript 的版本也在不断更新,其中 ES12 (ECMAScript 2021)是最新的版本。ES12 中新增了很多新特性,其中逻辑赋值操作符是一个非常实用的特性。
逻辑赋值操作符
在 ES12 中,新增了三个逻辑赋值操作符,分别是 ||=
, &&=
, ??=
。这三个操作符可以将一个变量与另一个值进行逻辑运算,并将结果赋值给该变量。
||=
操作符
||=
操作符表示“或等于”,它可以将一个变量与一个值进行逻辑或运算,如果变量的值为假(false
、null
、undefined
、0
、NaN
、""
),则将该值赋给变量,否则不进行任何操作。
let x = null; x ||= "hello"; console.log(x); // "hello" let y = "world"; y ||= "hello"; console.log(y); // "world"
在上面的例子中,第一个 ||=
操作符将 null
赋值给 x
,因为 null
为假值;而第二个 ||=
操作符不会改变 y
的值,因为 y
的值为真值。
&&=
操作符
&&=
操作符表示“与等于”,它可以将一个变量与一个值进行逻辑与运算,如果变量的值为真(非假值),则将该值赋给变量,否则不进行任何操作。
let x = "hello"; x &&= "world"; console.log(x); // "world" let y = null; y &&= "world"; console.log(y); // null
在上面的例子中,第一个 &&=
操作符将 "world"
赋值给 x
,因为 x
的值为真值;而第二个 &&=
操作符不会改变 y
的值,因为 y
的值为假值。
??=
操作符
??=
操作符表示“空值合并等于”,它可以将一个变量与一个值进行空值合并运算,如果变量的值为 null
或 undefined
,则将该值赋给变量,否则不进行任何操作。
let x = null; x ??= "hello"; console.log(x); // "hello" let y = "world"; y ??= "hello"; console.log(y); // "world"
在上面的例子中,第一个 ??=
操作符将 "hello"
赋值给 x
,因为 x
的值为 null
;而第二个 ??=
操作符不会改变 y
的值,因为 y
的值不为 null
或 undefined
。
其他新特性
除了逻辑赋值操作符外,ES12 还新增了很多其他的新特性,例如:
Promise.any()
Promise.any()
方法接收一个 Promise 数组作为参数,返回一个新的 Promise 对象。这个新的 Promise 对象在数组中的任意一个 Promise 对象解决(resolve
)或拒绝(reject
)时,都会解决或拒绝,并返回解决或拒绝的值。
-- -------------------- ---- ------- ----- -------- - - --------------------- ---- --------------------------- --------------------- --- -- --------------------- ------------ -- -------------------- ------------ -- ---------------------- -- ---------
在上面的例子中,Promise.any()
方法接收一个包含三个 Promise 对象的数组作为参数。第一个和第三个 Promise 对象被拒绝,而第二个 Promise 对象被解决。因为 Promise.any()
方法只要有一个 Promise 对象被解决就会返回,所以返回的值为第二个 Promise 对象的解决值。
数组的 at()
方法
数组的 at()
方法可以返回指定索引位置的元素,如果索引为负数,则从数组末尾开始计算。
const arr = ["a", "b", "c", "d"]; console.log(arr.at(2)); // "c" console.log(arr.at(-1)); // "d"
在上面的例子中,arr.at(2)
返回数组中索引为 2 的元素 "c"
,而 arr.at(-1)
返回数组中倒数第一个元素 "d"
。
总结
ES12 中新增的逻辑赋值操作符、Promise.any()
方法和数组的 at()
方法都是非常实用的新特性。掌握这些新特性可以让我们更加高效地编写 JavaScript 代码。在实际开发中,我们可以根据具体的情况选择使用这些新特性,从而提高代码的可读性和可维护性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/662a1159c9431a720c7aa3ec