为什么 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