eco*_*eer 13 javascript operators node.js
我在node.js v15.0.1中看到过这种语法: &&=,||=和??=。但我不知道它有什么作用。有人知道吗?
leo*_*ess 12
这些称为逻辑赋值运算符,总共有 3 个:
从根本上来说,它们的作用都是相同的:as前面的逻辑运算符&&,??和可以重写为。它们的唯一目的是替换更冗长的代码:||=x logical-operator= yx logical-operator (x = y)
x &&= y如果 x 不为真,则不执行任何操作;如果 x 为真,则将 x 的值更改为 y 。它等同于:
if (x) {
x = y
}
Run Code Online (Sandbox Code Playgroud)
x ||= y如果 x 为真,则不执行任何操作;如果 x不为真,则将 x 的值更改为 y 。它等同于:
if (!x) {
x = y
}
Run Code Online (Sandbox Code Playgroud)
x ??= y如果 x 不为null ,则不执行任何操作;如果 x 为null,则将 x 的值更改为 y 。它等同于:
if (x === null || x === undefined) {
x = y
}
Run Code Online (Sandbox Code Playgroud)
以下是一些示例,可帮助您加深对这些内容的理解:
const y = 'other value'
let def = 'initial' // truthy value
let zero = 0 // not truth value
let undef = undefined // nullish value
def &&= y // def = 'other value'
zero &&= y // zero = 0
undef &&= y // undef = 'undefined'
def ||= y // def = 'initial'
zero ||= y // zero = 'other value'
undef ||= y // undef = 'other value'
def ??= y // def = 'initial'
zero ??= y // zero = 0
undef ??= y // undef = 'other value'
Run Code Online (Sandbox Code Playgroud)
这些是新的逻辑赋值运算符。它们类似于更熟悉的运算符*=,如+=、 等。
someVar &&= someExpression大致相当于someVar = someVar && someExpression.
someVar ||= someExpression大致相当于someVar = someVar || someExpression.
someVar ??= someExpression大致相当于someVar = someVar ?? someExpression.
我说“大致”是因为有一个区别 - 如果不使用右侧的表达式,则不会调用可能的设置器。所以它更接近于:
someVar &&= someExpression就好像
if (!someVar) {
someVar = someExpression;
}
Run Code Online (Sandbox Code Playgroud)
等等。(不调用 setter 的事实不太可能对脚本产生影响,但这并非不可能。)这与其他传统的简写赋值运算符不同,它们无条件分配给变量或属性(从而调用 setter) 。这是一个演示的片段:
if (!someVar) {
someVar = someExpression;
}
Run Code Online (Sandbox Code Playgroud)
??,如果您不熟悉的话,它是空合并运算符。如果左侧是 或 ,它将计算null右侧undefined。
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |