Javascript 重写`c>;三,&;r&&;Object.defineProperty(target,key,r),r`into";“正常”;演示

Javascript 重写`c>;三,&;r&&;Object.defineProperty(target,key,r),r`into";“正常”;演示,javascript,Javascript,我有以下资料: return c > 3 && r && Object.defineProperty(target, key, r), r; 我把它改写成这样: if (c > 3 && r) { Object.defineProperty(target, key, r); } return r; 我说得对吗?是的,它们是等效的。您发现了两个潜在问题:&&返回一个操作数;,跳过该返回值 正如您所看到的(对于x,y)部分,第

我有以下资料:

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((真&假,3))是的,这些是等价的。@ssube how……@ssube,谢谢,只是想得到第二个意见:)@Mahi
&&
在JS中的操作符有点不可靠。等一下,我会整理一个CW答案。@Mahi查看下面的详细解释。