为什么javascript表现出奇怪的行为?

为什么javascript表现出奇怪的行为?,javascript,Javascript,我曾在java中尝试过这段代码,它可以正常工作,但在javascript中切换时却不能正常工作。 函数checkNumberIfContainsKey(数字、键){ 而(数量>0){ 如果(编号%10==键){ 返回true; } 数目/=10; } 返回false; } 日志(checkNumberIfContainsKey(19,9)); 日志(checkNumberIfContainsKey(191,9)); 日志(checkNumberIfContainsKey(912,9)); 日志(

我曾在java中尝试过这段代码,它可以正常工作,但在javascript中切换时却不能正常工作。
函数checkNumberIfContainsKey(数字、键){
而(数量>0){
如果(编号%10==键){
返回true;
}
数目/=10;
}
返回false;
}
日志(checkNumberIfContainsKey(19,9));
日志(checkNumberIfContainsKey(191,9));
日志(checkNumberIfContainsKey(912,9));

日志(checkNumberIfContainsKey(854,9))
number/=10
内部
而(number>0)
将运行多次,直到精度失败。(例如,对于191:191,然后是19.1,然后是1.91,然后是0.191,…)最好将数字拆分为单个数字的数组,然后检查您要查找的数字是否包含在该数组中:

函数checkNumberIfContainsKey(数字、键){
返回字符串(数字)。拆分(“”)。包括(字符串(键))
}
console.log(
checkNumberIfContainsKey(19,9),//正确
checkNumberIfContainsKey(191,9),//真
checkNumberIfContainsKey(912,9),//true
checkNumberIfContainsKey(185,9)//false
);像这样使用它

函数checkNumberIfContainsKey(数字、键){
变量a=!!number.toString()匹配(键)
控制台日志(a)
返回a;
}
checkNumberIfContainsKey(19,9)//true
checkNumberIfContainsKey(191,9)//真
checkNumberIfContainsKey(912,9)//true

checkNumberIfContainsKey(185,9)//false
我很久以来就在使用java,而且刚刚开始使用javascript 在java中,所有数据都属于数据类型并严格定义,因此在java中可以正常工作,但在JS中,当我将一个数字除以其他数字时,如果它是由十进制值生成的,那么该变量将自动变为浮点数,因此它永远不会小于0

通过应用
Math.trunc()
函数忽略小数部分的最简单解决方案:

函数checkNumberIfContainsKey(数字、键){
而(数量>0){
如果(编号%10==键){
返回true;
}
数字=数学真值(数字/10);
}
返回false;
}
console.log(
checkNumberIfContainsKey(19,9),//正确
checkNumberIfContainsKey(191,9),//真
checkNumberIfContainsKey(912,9),//true
checkNumberIfContainsKey(185,9)//false

);number%10==key
测试没有意义,因为
number
通常是带有OP逻辑的十进制数,而不是整数。(在这种情况下,条件将始终为false,可能在第一次迭代时除外)哦,糟糕,我忘了javascript在数据类型中是松散的,它将数字视为浮点数,并显示出这种行为。感谢您的帮助。放置断点或
调试器
并查看每个循环中分配给
number
的值。这种行为一点也不奇怪,因为在JavaScript中所有的数字都是浮点数,因此
191/10
19.1
而不是Java中的
19
。和
19.1%10===9.10000…1
“自动成为浮点数”不,它没有因为除法而更改其类型。Javascript中只有浮点数。