为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牧羊人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 undefinedb则返回,但如果a是 truea返回。

注:nullundefined""0NaN均为 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 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信