我有以下内容:
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));
&&
运算符将计算第一个操作数,如果为 false,则短路,否则计算第二个操作数并返回其结果。这意味着 Object.defineProperty
仅在您捕获的 c > 3 && r
时运行。当 ,
运算符丢弃结果时,defineProperty
已经改变了对象。
关于javascript - 将 `c > 3 && r && Object.defineProperty(target, key, r), r`重写为 "normal"演示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40684048/