parseInt返回F上的数字,不带第二个参数

问题描述 投票:-1回答:1

非常简单,但是我不明白为什么会这样,如果这不是正常行为,我认为这一定是我的代码中的错误,但是由于我检查了所有内容,而且看起来似乎是正确的,所以我认为这一定是正确的parseInt正在执行的操作。

我的代码:

$(array).each(function(key, value){
    //ignore the if statement, it's about the else if statement
    if (isNaN(value) && poppin === 'h') {
        console.log(reverseArray);
    } else if (typeof parseInt(value) === 'number') {
            console.log(value);
            numbers++;
    } else {
        console.log('this else statement is pretty useless');
    }
});

现在,如果数组是:

let array = ['f', '1', '2', '3'];

它将以else if结束,即使(我假设)F不是数字。我读到有关parseInt()的信息,如果给第二个参数作为参数,它可以(并且会)将F计算为一个数字,例如:parseInt('F', 16);

我的问题:在我的代码上下文中,为什么f被认为是整数?

javascript jquery
1个回答
0
投票

F是一个十六进制。第二个参数是数字序列的类型。例如,parseInt(5, 2);将返回101,因为它返回二进制数(2个数字,1和0)。第二个参数可以是2(二进制),8(八进制)和16(十六进制)。您的parseInt('F', 16);返回数字的原因是因为该顺序中有16个数字(或10个数字,0-9和5个字母代表数字。A = 10, B = 11, C = 12, D = 13, E = 14, F = 15)。

var number = 'F';
console.log(parseInt(number, 2)); // F isn't part of sequence (0,1)
console.log(parseInt(number, 8)); // F isn't part of sequence (0-7)
console.log(parseInt(number, 16)); // F is 15, as defined in answer

因此,F16以外,不视为其他任何数字。返回NaN的typeOf不等于number。因此,如果条件poppin === 'h'被删除(那是您的问题所在),它应该可以正常运行。

var nums = ['F', 20];
for (n of nums) {

  // Your code being run with two different values
  if (isNaN(n)) {
          console.log("Not a number");
   } else if (typeof parseInt(n) === 'number') {
          console.log("A number");
   }
   
}
© www.soinside.com 2019 - 2024. All rights reserved.