当0是有效值时,我可以使用条件赋值吗?

时间:2014-01-16 19:44:13

标签: javascript

例如,我想接受输入,并有条件地将其设置为另一个变量(如果它是一个数字)。

我想做点什么

var x = input || "default value" 

如果输入未定义,我可以设置默认值。但是,我希望输入是一个数字,在input == 0的情况下,我想要x==0

我知道我可以使用三元运算符并执行类似

的操作
var x = typeof(input) !== "undefined" ? input : "default value" 

有一种不那么冗长的方法吗?

3 个答案:

答案 0 :(得分:1)

我所知道的最实用,更简洁的方法是使用帮助函数

function def(input, defvalue){
   return (typeof(input) !== "undefined" ? input : "default value");
}

var x = def(input, "default");

但它会评估默认值,即使你最终没有使用它,所以语义也略有不同。

除此之外,我认为Coffeescript有几个operators来做你想做的事情,但是他们认为null和undefined是等价的(因此等价的JS将是input != null ? input : defvalue)。

答案 1 :(得分:1)

  

我想接受一个输入,并有条件地将它设置为另一个变量,如果它是一个数字。

var x = isFinite(input) ? input : "default value";

警告:如果输入为null,则仍将x设置为null。但也许这就是你要找的东西 - 不确定它能缩短多少。

答案 2 :(得分:0)

如果您期望number类型并希望将x设置为默认值,则可以尝试:

var x = (input === +input) ? input : "default value";

+运算符尝试将input转换为数字类型。如果它不是数字,它将返回NaN。如果它是一个数字,但input实际上是一个字符串,那么严格的===标识比较将返回false。

这样做的问题:

var x = typeof(input) !== "undefined" ? input : "default value" 

null将被视为有效输入,因为typeof(null)object