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

时间:2015-09-21 11:00:15

标签: javascript if-statement shorthand shorthand-if

我以这两种方式调用函数

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){/*...*/},就像使用{{1}}

的长手法一样

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

这样做:

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

该解决方案可防止虚假值并返回0作为默认值。阅读更多关于逻辑运算符的here