I'm calling a function in either those two ways
foo([x,y]) or foo({x:x,y:y}) with x,y ∈ [0,∞)
the foo function looks like this
var x = pos.x || pos[0],
y = pos.y || pos[1];
If I call the function the second way with x=0 then pos.x will be valuated as false, which leaves x=pos[0] that is undefined.
I wondered whether there is way for 0 not valuated as false like in the longhand method with if(pos.x===0){/*...*/}
You need to check if
pos.xexists, rather than by checking it's value. You can do this with thehasOwnPropertyfunction: