亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

&&=、||= 和 ??= 有何用途?

&&=、||= 和 ??= 有何用途?

牧羊人nacy 2023-06-29 22:33:26
我在中看到過這個語法節點.jsv15.0.1:&&=、||=和??=。但我不知道它有什么作用。有人知道嗎?
查看完整描述

3 回答

?
心有法竹

TA貢獻1866條經驗 獲得超5個贊

這些稱為邏輯賦值運算符,總共有 3 個:

  1. 邏輯與賦值(?&&=)

  2. 邏輯或賦值(?||=)

  3. 邏輯空賦值(???=)

從根本上來說,它們的作用都是相同的:as前面的邏輯運算符&&,??和可以重寫為。它們的唯一目的是替換更冗長的代碼:||=x logical-operator= yx logical-operator (x = y)

  1. x &&= y如果 x不為真,則不執行任何操作;如果 x 為,則將 x 的值更改為 y?。它等同于:

    if?(x)?{
    ??x?=?y?
    }
  2. x ||= y如果 x 為真,則不執行任何操作;如果 x不為真,則將 x 的值更改為 y?。它等同于:

    if?(!x)?{
    ??x?=?y?
    }
  3. x ??= y如果 x 不為null ,則不執行任何操作;如果 x 為null,則將 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'


查看完整回答
反對 回復 2023-06-29
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

這些是新的邏輯賦值運算符。它們類似于更熟悉的運算符*=,如+=、 等。

someVar &&= someExpression大致相當于someVar = someVar && someExpression.

someVar ||= someExpression大致相當于someVar = someVar || someExpression.

someVar ??= someExpression大致相當于someVar = someVar ?? someExpression.

我說“大致”是因為有一個區別 - 如果不使用右側的表達式,則不會調用可能的設置器。所以它更接近于:

someVar &&= someExpression就好像

if?(!someVar)?{
??someVar?=?someExpression;
}

等等。(不調用 setter 的事實不太可能對腳本產生影響,但這并非不可能。)這與其他傳統的簡寫賦值運算符不同,它們無條件分配給變量或屬性(從而調用 setter) 。這是一個演示的片段:

const obj = {

? _prop: 1,

? set prop(newVal) {

? ? this._prop = newVal;

? },

? get prop() {

? ? return this._prop;

? }

};


// Setter does not get invoked:

obj.prop ||= 5;

??,如果您不熟悉的話,它是空合并運算符。如果左側是 或 ,它將計算null右側undefined。



查看完整回答
反對 回復 2023-06-29
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

a = a || b相當于a ||= b=> 如果a為 true,a則返回,但如果a為 false,b則返回。

a = a && b相當于a &&= b=> 如果a為 true,b則返回,但如果a為 false,a則返回。

a = a ?? b相當于a ??= b=> 如果a只是 is nullor 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

如果你不明白,請再讀一遍!


查看完整回答
反對 回復 2023-06-29
  • 3 回答
  • 0 關注
  • 282 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號