以下函数使用Short Circuit Operator作为默认值返回0
:
function custNumParse(str){
return str*1||0;
}
我不确定这会返回第二个(我的意思是,我知道当str*1
无法评估到true
时),但我不确定哪些输入可以产生乘以1
时的输出。
我知道虚假价值是0, "", false, null, undefined, NaN
,但这对我没那么大帮助。
换句话说,当我将这个函数与对象或布尔值等一起使用时,我会发生什么事情。我知道我可以测试它们,但我确信有更简单的方法
关于什么是找到这些家伙而不进行全部测试的最合适方法的任何想法?
答案 0 :(得分:5)
*
运算符仅适用于数字,因此任何非数字(或不能转换为数字)的内容都会使str*1
返回NaN
。另外0*1
显然是0
。
编辑:布尔值似乎转换为0
或1
。
false * 1 === 0
true * 1 === 1
编辑2:具有数值的字符串也将被转换
"12" * 1 === 12
"0" * 1 === 0
编辑3:小心数组(将它们转换为字符串,然后转换为整数)。
[] * 1 === 0
[2] * 1 === 2
[1,2] * 1 === NaN
答案 1 :(得分:2)
你的回答是类型转换。值str将是类型转换然后相乘。请参阅http://www.java-samples.com/showtutorial.php?tutorialid=819
中的这些示例Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number("5.5") 5.5
Number("56") 56
Number("5.6.7") NaN
Number(new Object()) NaN
Number(100) 10
所以"5.5"*1
是真的。
答案 2 :(得分:1)
JavaScript是弱类型的。这意味着当你将某些东西乘以1时,它会尝试将该东西首先改为数字。
如果您的字符串看起来像数字,它会尝试解释它。由于乘以1对数字没有任何作用,您将得到该数字。
如果字符串看起来不像数字,表达式将失败并导致NaN
。由于NaN
为false,因此它会落空并返回0
。
将对象转换为数字也没有合理的方法,因此您最终也会得到NaN
。
至于布尔值,true为1,false为0。
所以该函数的作用是尝试将参数解释为数字,如果失败,则返回0.