我有以下内容:

return c > 3 && r && Object.defineProperty(target, key, r), r;


我已经这样重写它:

if (c > 3 && r) {
    Object.defineProperty(target, key, r);
}

return r;


我说对了吗?

最佳答案

是的,这些是等效的。您遇到了两个潜在问题:&&返回操作数和,跳过该返回值。

如您所见(对于x, y),第一个操作数的值被忽略。逗号运算符只是对第一个表达式求值,它不在乎会发生什么(除非抛出异常)。例如:



console.log((true && false, 3));





&&运算符将评估第一个操作数,如果错误则短路,否则将评估第二个操作数并返回其结果。这意味着Object.defineProperty仅在捕获的c > 3 && r下运行。然后,运算符丢弃结果时,defineProperty已经使该对象变异。

关于javascript - 将`c> 3 && r && Object.defineProperty(target,key,r),r`重写为“普通”表示形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40684048/

10-09 21:19