Почему isFinite(undefined) != isFinite(null)?

Почему значение для undefined считается конечным в javascript, а значение null — нет?

Это очень простой вопрос, который помешал моему googlefoo (слишком много шума).

isFinite(undefined); // false
isFinite(null); // true

Я не понимаю, так как я ожидаю, что null и undefined будут обрабатываться одинаково.


person Oliver Kane    schedule 08.10.2013    source источник


Ответы (2)


Это потому, что Number(null) === 0.

http://es5.github.io/#x9.3

person georg    schedule 08.10.2013
comment
Вы, сэр, быстры. Большое спасибо за удовлетворение моего любопытства! - person Oliver Kane; 08.10.2013

конечный (число)

Возвращает false, если аргумент приводится к NaN, +∞ или −∞, и в противном случае возвращает true.

isFinite преобразовать ввод с помощью Number() и:

Number(undefined); //== NaN
Number(null); //== 0

по этой причине undefined является ложным, а null является истинным для isFinite.

Если вы попытаетесь:

isFinite(!undefined); // true

потому что undefined - это NaN, и при его отрицании он преобразуется в 1, что является конечным.

person Zaheer Ahmed    schedule 19.03.2014