x &&= y在x为 not truthy 时不执行任何操作,在x为 truthy 时将x的值更改为y。
if (x) {
x = y
}
x ||= y在x为 truthy 时不执行任何操作,在x为 not truthy 时将x的值更改为y。
if (!x) {
x = y
}
x ??= y在x为 not nullish 时不执行任何操作,在x为 nullish 时将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'
a = a || b等价于a ||= b =〉如果a为真,则a返回,但是如果a为假,则b返回。 a = a && b等价于a &&= b =〉如果a为真,则b返回,但是如果a为假,则a返回。 a = a ?? b等价于a ??= b =〉如果a正好是null或undefined,则b返回,但是如果a为真,则a返回。 注意:null、undefined、""、0、NaN为假 示例:
let a = -22
const b = false
a &&= b
console.log(a) // false
let a = 0
const b = 'hello'
a ||= b
console.log(a) // hello
let a = false
let b = true
a ??= b
console.log(a) // false
let a = null
let b = true
a ??= b
console.log(a) // true
3条答案
按热度按时间mnemlml81#
这些是新的logical assignment operators,它们类似于我们更熟悉的运算符,如
*=
、+=
等。someVar &&= someExpression
大致等于someVar = someVar && someExpression
。someVar ||= someExpression
大致等于someVar = someVar || someExpression
。someVar ??= someExpression
大致等于someVar = someVar ?? someExpression
。我说“粗略地”是因为有一个区别--如果没有使用右边的表达式,可能的setter就不会被调用,所以它更接近于:
就像
(setter不被调用的事实不太可能对脚本产生影响,但也不是不可能。)这与其他传统的速记赋值运算符不同,后者 * 确实 * 无条件地赋值给变量或属性(从而调用setter)。
??
,如果你不熟悉的话,它是一个空合并操作符,如果左边是null
或者undefined
,它将计算右边的值。e5njpo682#
它们被称为逻辑赋值运算符,总共有三个:
&&=
)||=
)??=
)从根本上说,它们都是这样做的:
x logical-operator= y
中=
前面的逻辑运算符&&
、??
和||
可以重写为x logical-operator (x = y)
,它们的唯一目的是替换更冗长的代码:x &&= y
在x为 not truthy 时不执行任何操作,在x为 truthy 时将x的值更改为y。x ||= y
在x为 truthy 时不执行任何操作,在x为 not truthy 时将x的值更改为y。x ??= y
在x为 not nullish 时不执行任何操作,在x为 nullish 时将x的值更改为y。以下是一些示例,可进一步加深您对这些问题的理解:
c3frrgcw3#
a = a || b
等价于a ||= b
=〉如果a
为真,则a
返回,但是如果a
为假,则b
返回。a = a && b
等价于a &&= b
=〉如果a
为真,则b
返回,但是如果a
为假,则a
返回。a = a ?? b
等价于a ??= b
=〉如果a
正好是null
或undefined
,则b
返回,但是如果a
为真,则a
返回。注意:
null
、undefined
、""
、0
、NaN
为假示例:
如果你不明白,再读一遍!