循环谓词中的赋值是否需要括号?

时间:2014-10-23 17:18:51

标签: javascript loops variable-assignment predicates

这是JavaScript中用来替换节点子节点的函数

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

是否有任何JS实现需要将谓词写为

((child = node.firstChild))

1 个答案:

答案 0 :(得分:0)

不,JavaScript从不需要额外的parens,如果存在,它们在语言级别上没有用处。

引擎必须彻底破坏以解决问题。赋值表达式的结果是分配的值(这是a = b = foo()工作的原因),并评估while循环的parens中的表达式,然后计算结果值强制转换为布尔值以确定循环是否应该继续。任何引起错误的引擎(或添加破坏代码的lint风格的错误)都不会在野外表现良好。