3 回答

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
這些稱(chēng)為邏輯賦值運(yùn)算符,總共有 3 個(gè):
邏輯與賦值(?
&&=
)邏輯或賦值(?
||=
)邏輯空賦值(?
??=
)
從根本上來(lái)說(shuō),它們的作用都是相同的:as前面的邏輯運(yùn)算符&&
,??
和可以重寫(xiě)為。它們的唯一目的是替換更冗長(zhǎng)的代碼:||
=
x logical-operator= y
x logical-operator (x = y)
x &&= y
如果 x不為真,則不執(zhí)行任何操作;如果 x 為真,則將 x 的值更改為 y?。它等同于:if?(x)?{ ??x?=?y? }
x ||= y
如果 x 為真,則不執(zhí)行任何操作;如果 x不為真,則將 x 的值更改為 y?。它等同于:if?(!x)?{ ??x?=?y? }
x ??= y
如果 x 不為null ,則不執(zhí)行任何操作;如果 x 為null,則將 x 的值更改為 y?。它等同于:if?(x?===?null?||?x?===?undefined)?{ ??x?=?y? }
以下是一些示例,可幫助您加深對(duì)這些內(nèi)容的理解:
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'

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
這些是新的邏輯賦值運(yùn)算符。它們類(lèi)似于更熟悉的運(yùn)算符*=
,如+=
、 等。
someVar &&= someExpression
大致相當(dāng)于someVar = someVar && someExpression
.
someVar ||= someExpression
大致相當(dāng)于someVar = someVar || someExpression
.
someVar ??= someExpression
大致相當(dāng)于someVar = someVar ?? someExpression
.
我說(shuō)“大致”是因?yàn)橛幸粋€(gè)區(qū)別 - 如果不使用右側(cè)的表達(dá)式,則不會(huì)調(diào)用可能的設(shè)置器。所以它更接近于:
someVar &&= someExpression
就好像
if?(!someVar)?{ ??someVar?=?someExpression; }
等等。(不調(diào)用 setter 的事實(shí)不太可能對(duì)腳本產(chǎn)生影響,但這并非不可能。)這與其他傳統(tǒng)的簡(jiǎn)寫(xiě)賦值運(yùn)算符不同,它們無(wú)條件分配給變量或?qū)傩裕◤亩{(diào)用 setter) 。這是一個(gè)演示的片段:
const obj = {
? _prop: 1,
? set prop(newVal) {
? ? this._prop = newVal;
? },
? get prop() {
? ? return this._prop;
? }
};
// Setter does not get invoked:
obj.prop ||= 5;
??
,如果您不熟悉的話(huà),它是空合并運(yùn)算符。如果左側(cè)是 或 ,它將計(jì)算null
右側(cè)undefined
。

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
a = a || b
相當(dāng)于a ||= b
=> 如果a
為 true,a
則返回,但如果a
為 false,b
則返回。
a = a && b
相當(dāng)于a &&= b
=> 如果a
為 true,b
則返回,但如果a
為 false,a
則返回。
a = a ?? b
相當(dāng)于a ??= b
=> 如果a
只是 is null
or undefined
,b
則返回,但如果a
是 truea
返回。
注:
null
、undefined
、""
、0
、NaN
均為 false
例子:
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
如果你不明白,請(qǐng)?jiān)僮x一遍!
添加回答
舉報(bào)