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