我有以下内容:
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/