为什么 javascript 接受小数作为整数
Why does javascript accept a decimal as an integer
我有这个html:
<input type='number' id='length' step='0.1' min='0'; max='5'>Length
和这个Javascript
num=document.getElementById('length').value;
if(num==1 || 2 || 3 || 4|| 5){
num='0'+num;
}
我的问题是:虽然我只希望括号内的代码在输入的数字是整数时执行,但如果检测到 0.8 或其他小数,它也会激活。知道为什么吗?我如何解决它?谢谢
你应该做
if (num == 1 || num == 2 || num == 3 || num == 4 || num == 5)
错误 - 否则它会将 2 与 2 进行比较,并表示最后 4 个 'if' 参数为真。
CORRECTO - JS 中的任何数字都被认为是真实的。
要确保 num
是一个整数,而不必定义所有可能性,请使用:
if (num % 1 == 0)
您必须编辑 "If" 循环:
if (num == 1 || num == 2 || num == 3 || num == 4 || num == 5)
为什么:
num==1 || 2 || 3 || 4|| 5
等于:
(num==1) || 2 || 3 || 4|| 5
所以如果num
是"1"
(总是字符串类型),表达式returnstrue
,否则2
(也是一个truthy 值),最终你的 if
语句总是成功的。
如何修复:
// implicitly converts the string type into number type before comparison
// returns true if it is an integer-like string
num == Math.floor(num)
所以你可以这样做:
if (num == Math.floor(num) && num > 0 && num < 6) {
// an integer-like string that meets the requirement [1, 5]
}
但请记住,num
现在仍然是 string
类型。如果你想要 number
,请执行:
num = +num
我有这个html:
<input type='number' id='length' step='0.1' min='0'; max='5'>Length
和这个Javascript
num=document.getElementById('length').value;
if(num==1 || 2 || 3 || 4|| 5){
num='0'+num;
}
我的问题是:虽然我只希望括号内的代码在输入的数字是整数时执行,但如果检测到 0.8 或其他小数,它也会激活。知道为什么吗?我如何解决它?谢谢
你应该做
if (num == 1 || num == 2 || num == 3 || num == 4 || num == 5)
错误 - 否则它会将 2 与 2 进行比较,并表示最后 4 个 'if' 参数为真。
CORRECTO - JS 中的任何数字都被认为是真实的。
要确保 num
是一个整数,而不必定义所有可能性,请使用:
if (num % 1 == 0)
您必须编辑 "If" 循环:
if (num == 1 || num == 2 || num == 3 || num == 4 || num == 5)
为什么:
num==1 || 2 || 3 || 4|| 5
等于:
(num==1) || 2 || 3 || 4|| 5
所以如果num
是"1"
(总是字符串类型),表达式returnstrue
,否则2
(也是一个truthy 值),最终你的 if
语句总是成功的。
如何修复:
// implicitly converts the string type into number type before comparison
// returns true if it is an integer-like string
num == Math.floor(num)
所以你可以这样做:
if (num == Math.floor(num) && num > 0 && num < 6) {
// an integer-like string that meets the requirement [1, 5]
}
但请记住,num
现在仍然是 string
类型。如果你想要 number
,请执行:
num = +num