javascript - 将 `c > 3 && r && Object.defineProperty(target, key, r), r`重写为 "normal"演示

标签 javascript

我有以下内容:

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/

相关文章:

javascript - 悬停时显示提示信息

javascript - 在 Twitter 上显示和隐藏内容

javascript - 如何在html文本区域逐行阅读文本?

javascript - PhantomJS - 无法单击表单按钮

javascript - ontransitionend 未触发/附加但 addEventListener 有效

javascript - 将处理程序附加到 DocumentSelectionChanged 事件会禁用 Office for Mac 上的撤消堆栈

php - 通过一个 php 文件包含许多 .js 文件是一种好的做法吗?

窗口/选项卡之间的 javascript/jquery 内存空间

javascript - 如何从另一个对象内的函数内使用 this 引用顶级对象

javascript - 计算数组中的结果