parseInt возвращает число на F без второго аргумента - PullRequest
0 голосов
/ 07 ноября 2019

Довольно просто, но я не могу понять, почему это происходит, если это не нормальное поведение, я предполагаю, что это должно быть ошибка в моем коде, но, поскольку я проверил все, и это кажется правильным, я думаю, что это должнобыть что-то делает 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 считается целым числом вконтекст моего кода?

1 Ответ

0 голосов
/ 07 ноября 2019

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. И typeOf, который возвращает NaN, не равен числу. Следовательно, он должен работать идеально, если условие 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");
   }
   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...