允许为零
短路评估确定第一个值是否有误。 如果是,则返回第二个值,如下所示:
var x = y || z; // if y is falsey return z
如果不使用if / else语句或三元运算符进行短路评估,有没有办法忽略零值为假的?
您可以将您的号码包裹到一个Number对象中并检查;
var x = new Number(0) || console.log("never gets printed");
console.log(parseInt(x));
//or
console.log(x.valueOf());
编辑:
如果z
是一个数字,你可以使用这样的技巧:
var x1 = Number(y===0 && '0' || y || z)
// or
var x2 = (y===0 && '0' || y || z)-0
var z = -1;
var y = 42;
var x = y || z;
var x1 = Number(y===0 && '0' || y || z)
var x2 = (y===0 && '0' || y || z)-0
console.log('x:',x, ' x1:',x1, ' x2:',x2);
var y = 0;
var x = y || z;
var x1 = Number(y===0 && '0' || y || z)
var x2 = (y===0 && '0' || y || z)-0
console.log('x:',x, ' x1:',x1, ' x2:',x2);
var y = null;
var x = y || z;
var x1 = Number(y===0 && '0' || y || z)
var x2 = (y===0 && '0' || y || z)-0
console.log('x:',x, ' x1:',x1, ' x2:',x2);
编辑:这使用三元运算符,所以如果这不是你想要的,不要使用它。
当然,这是另一个简单的方法:
var x = y || y==0?0:z;
如果y
为真,则x
设为y
如果y
是虚假的,并且y==0
,则x
被设置为0
如果y
是falsy,并且y!=0
,那么x
被设置为z
;
上一篇: Allow for zero