gpt4 book ai didi

javascript - if语句里面有两组括号,这是什么意思?

转载 作者:行者123 更新时间:2023-11-30 08:20:57 28 4
gpt4 key购买 nike

最近我看到一些奇怪的代码,看起来有点像这样:

let a;
if ((a = anotherVariable)) {
....
}

你能向我解释一下这是什么意思以及为什么这样做吗?

编辑:

请注意,他没有将 aanotherVariable 进行比较,而是对其进行赋值。并且 if 括号中没有其他术语,因此它不像 if ((something) && (something else)) {...}

那么为什么不单独分配一个变量,然后检查anotherVariable的真实性呢?

原码here (搜索matched = prevTextFromSpace)。

最佳答案

如果你写

if (a = anotherVariable) {
....
}

它工作正常,但 = 是一个赋值,而不是比较。

表达式a = b的值是b的值(并且它也存储在变量a中)。如果 b 的计算结果为真值,则采用 if 分支。

但是,由于 = 不是 ==,linter 程序通常将上述 if 语句标记为潜在错误。很多时候,开发人员想要==,却错误地输入了=。 linter 尝试检测此错误。

如果真正的意图是将b的值复制到a中,并使用该值作为if语句的条件(并且不将 ab 进行比较),那么上面的代码是正确的。有两种方法可以消除 linter 警告:

  1. 将赋值放在 if 语句前面:

    a = b
    if (a) {
    ...
    }
  2. 将赋值放在一对括号内:

    if ((a = b)) {
    ...
    }

    这将赋值与 if 解耦。赋值不再是 if 条件。赋值只是较大表达式 (a = b) 的子表达式。

    这个较大的表达式是 if 语句的条件,它不是赋值,因此没有什么可警告的。是的,它包含一个赋值,但该赋值只是一个子表达式。

它看起来像黑客,但事实并非如此。它仅表示对编程语言中的表达式和语句有很好的理解。

关于javascript - if语句里面有两组括号,这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53723682/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com