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

时间:2019-05-04 09:57:04

标签: javascript

我已经在Java中尝试了这段代码,它可以正常工作,但是在切换javascript时它无法正常工作。

function checkNumberIfContainsKey(number, key){
    while(number > 0){
        if(number%10 == key){
            return true;
        }
        number /= 10;        
    }
    return false;
}

console.log(checkNumberIfContainsKey(19, 9));
console.log(checkNumberIfContainsKey(191, 9));
console.log(checkNumberIfContainsKey(912, 9));
console.log(checkNumberIfContainsKey(854, 9));

如果此函数在任何位置包含键,则应返回true。 例: checkNumberIfContainsKey(19,9) 输出:true

my expected output:
checkNumberIfContainsKey(19, 9)   //true
checkNumberIfContainsKey(191, 9)  //true
checkNumberIfContainsKey(912, 9)  //true
checkNumberIfContainsKey(185, 9)  //false
my output:
checkNumberIfContainsKey(19, 9)   //true
checkNumberIfContainsKey(191, 9)  //false
checkNumberIfContainsKey(912, 9)  //false
checkNumberIfContainsKey(185, 9)  //false

3 个答案:

答案 0 :(得分:1)

all中的

number /= 10将运行很多次,直到精度失败。 (例如,对于191:191,然后是19.1,然后是1.91,然后是0.191,...)将数字拆分成单个数字的数组可能更好,然后检查您要查找的数字是否包含在该数组中:

while(number > 0)

答案 1 :(得分:1)

像这样使用它

function checkNumberIfContainsKey(number, key){
  var a = !!number.toString().match(key)
  console.log(a)
  return a;
}

checkNumberIfContainsKey(19, 9)   //true
checkNumberIfContainsKey(191, 9)  //true
checkNumberIfContainsKey(912, 9)  //true
checkNumberIfContainsKey(185, 9)  //false

答案 2 :(得分:0)

我使用Java很久了,刚开始使用javascript 在Java中,所有数据都属于数据类型且经过严格定义,因此在Java中工作正常,但在JS中,如果我将数字除以其他数字(如果它是由十进制值得出的),则该变量会自动变为浮点数,因此它永远不会小于0。

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

function checkNumberIfContainsKey(number, key){
    while(number > 0){
        if(number%10 == key){
            return true;
        }
        number = Math.trunc(number / 10);        
    }
    return false;
}
console.log(
  checkNumberIfContainsKey(19, 9),   //true
  checkNumberIfContainsKey(191, 9),  //true
  checkNumberIfContainsKey(912, 9),  //true
  checkNumberIfContainsKey(185, 9)  //false
);