Node.js 你的目的是什么&;=,| |=那么???=发球?
我在v15.0.1中看到过这种语法:Node.js 你的目的是什么&;=,| |=那么???=发球?,node.js,javascript,operators,Node.js,Javascript,Operators,我在v15.0.1中看到过这种语法:&&=,|124;=和??=。 但我不知道它有什么作用。有人知道吗?这些是新的。它们类似于更熟悉的操作符,如*=,+=,等等 someVar&&someExpression大致相当于someVar=someVar&&someExpression someVar | |=someExpression大致相当于someVar=someVar | | someExpression someVar???=someExpression大致相当于someVar=someV
&&=
,|124;=
和??=
。
但我不知道它有什么作用。有人知道吗?这些是新的。它们类似于更熟悉的操作符,如*=
,+=
,等等
someVar&&someExpression
大致相当于someVar=someVar&&someExpression
someVar | |=someExpression
大致相当于someVar=someVar | | someExpression
someVar???=someExpression
大致相当于someVar=someVar??someExpression
我之所以说“粗略”,是因为有一个区别——如果不使用右侧的表达式,则不会调用可能的setter。所以它有点接近:
someVar&&=someExpression
类似于
if (!someVar) {
someVar = someExpression;
}
等等。(不调用setter的事实是会对脚本产生影响,但这并非不可能。)这与其他传统的速记赋值运算符不同,后者会无条件地赋值给变量或属性(从而调用setter)。下面是一个要演示的片段:
const obj={
_道具:1,,
设置道具(newVal){
这个._prop=newVal;
},
获取道具(){
把这个还给我;
}
};
//无法调用Setter:
obj.prop | |=5代码>这些被称为逻辑赋值运算符,总共有三个:
(&&
)
(| |=
)
(??=
)
基本上,它们都是一样的:在=
前面的逻辑运算符&&
,??
和|
可以重写为x逻辑运算符(x=y)
。它们的唯一目的是替换更详细的代码:
x&&=y
当x不真实时返回x,当x真实时返回y。这与:
if (x) {
x = y
}
if (!x) {
x = y
}
if (x === null || x === undefined) {
x = y
}
x | |=y
当x为真时返回x,当x为非真时返回y。这与:
if (x) {
x = y
}
if (!x) {
x = y
}
if (x === null || x === undefined) {
x = y
}
x???=y
当x不为空时返回x,当x为空时返回y。这与:
if (x) {
x = y
}
if (!x) {
x = y
}
if (x === null || x === undefined) {
x = y
}
以下是一些例子,以加深您对这些问题的理解:
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'
Mozilla建议&&=与您提出的简化方法略有不同,但差别不大。不幸的是,当前接受的答案包含一些不正确的信息。可能是因为逻辑赋值运算符当时还处于早期阶段,所以实现发生了变化。@leonheess我查看了它,但没有发现任何错误,您能指出什么是错误的吗?Thanks@CertainPerformance将我的答案中的等效部分或与您的“等效代码”进行比较。