【问题标题】:Assignment in loop predicate, are parentheses needed?循环谓词中的赋值,是否需要括号?
【发布时间】:2014-12-19 10:51:28
【问题描述】:

这是一个替换节点子节点的 JavaScript 函数

var app = {};
app.replaceChildren = function (node, childrenReplacementNode) {
    var child;
    while (child = node.firstChild) {
        node.removeChild(child);
    }
    node.appendChild(childrenReplacementNode);
};

有没有要求谓词写成的JS实现

((child = node.firstChild))?

【问题讨论】:

  • 嗯,不。括号接受任何表达式,并返回其结果,因此它们是等价的。但是,linter 可能会抱怨该职位的分配。 linter 接受的一种常见语法是在赋值周围使用额外的括号,以便让它知道您确实打算进行赋值而不是比较。
  • ...这是jsHint docs,它显示了用于使警告静音的括号。因此,如果您的问题是由您看到的某些代码引起的,那很可能就是原因。
  • 您可能会发现这个问题及其答案很有趣,请重新编写清空元素的代码:stackoverflow.com/questions/13798796/…
  • @squint:哦,有趣。

标签: javascript loops variable-assignment predicates


【解决方案1】:

不,JavaScript 从不要求额外的括号,如果存在,它们在语言级别上没有任何用途。

引擎必须彻底损坏才能出错。赋值表达式的结果是被赋值的值(这就是a = b = foo() 起作用的原因),while 循环的括号中的表达式被求值,然后将结果值强制转换为布尔值以确定循环是否应该继续。任何做错任何一个的引擎(或添加破坏代码的 lint 式错误)都不会在野外表现良好。

【讨论】:

    猜你喜欢
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多