shorthand-if 表达式中的值变量为 0 而不是 false

Value variable as 0 not as false in shorthand-if expression

我正在用这两种方式调用函数

foo([x,y])foo({x:x,y:y})x,y ∈ [0,∞)

foo 函数如下所示

var x = pos.x || pos[0],
    y = pos.y || pos[1];

如果我用 x=0 以第二种方式调用该函数,那么 pos.x 将被评估为 false,这使得 x=pos[0]undefined.

我想知道是否有办法 0 不被评估为 false 就像在普通方法中 if(pos.x===0){/*...*/}

您需要检查 pos.x 是否存在,而不是检查它的值。您可以使用 hasOwnProperty 函数执行此操作:

var x = pos.hasOwnProperty('x') ? pos.x : pos[0];

这样做就可以了:

var x = pos.x || pos[0] || 0,
    y = pos.y || pos[1] || 0;

该解决方案防止虚假值和 returns 0 作为默认值。阅读更多 here 关于逻辑运算符的内容。