Ответ 1
num % 1 === 0
Это преобразует num
, чтобы сначала напечатать Number
, поэтому любое значение, которое может быть преобразовано в целое число, пройдет тест (например, '42'
, true
).
Если вы хотите исключить их, дополнительно проверьте
typeof num === 'number'
Вы также можете использовать parseInt()
для этого, то есть
parseInt(num) == num
для нетипизированной проверки и
parseInt(num) === num
для типизированной проверки.
Обратите внимание, что тесты не эквивалентны: проверка через parseInt()
сначала преобразуется в String
, поэтому, например, true
не пройдет проверку.
Также обратите внимание, что нетипизированная проверка через parseInt()
будет корректно обрабатывать шестнадцатеричные строки, но будет сбой для восьмеричных (то есть числовых строк с начальным нулем), поскольку они распознаются parseInt()
, но не Number()
. Если вам нужно обрабатывать десятичные строки с ведущими нулями, вам нужно указать аргумент radix.