非常简单,但是我不明白为什么会这样,如果这不是正常行为,我认为这一定是我的代码中的错误,但是由于我检查了所有内容,而且看起来似乎是正确的,所以我认为这一定是正确的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
被认为是整数?
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
因此,F
除16
以外,不视为其他任何数字。返回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");
}
}