2

我以这两种方式调用一个函数

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则 thenpos.x将被评估为 false,x=pos[0]undefined.

我想知道是否有办法不像在速记方法中0那样评估falseif(pos.x===0){/*...*/}

4

2 回答 2

3

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

var x = pos.hasOwnProperty('x') ? pos.x : pos[0];
于 2015-09-21T11:02:20.880 回答
1

这将做到:

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

该解决方案防止虚假值并返回 0 作为默认值。在此处阅读有关逻辑运算符的更多信息。

于 2015-09-21T11:17:29.043 回答