Ответ 1
Number.POSITIVE_INFINITY
является константой и, следовательно, не перезаписывается, тогда как Infinity
является свойством window
и является перезаписываемым:
Number.POSITIVE_INFINITY = 123;
Number.POSITIVE_INFINITY; // Infinity
Infinity = 123;
Infinity; // 123
Это то же самое, что и undefined
или NaN
, которые в основном являются свойствами window
и перезаписываются. Нехорошо полагаться на window.undefined
; скорее вы хотите создать "реальный" undefined
самостоятельно (как в самозапускаемой функции, где вы не передаете аргумент, а объявляете его в функции).
Технические характеристики:
15.7.3.6
Number.POSITIVE_INFINITY
Значение
Number.POSITIVE_INFINITY
равно+∞
.Это свойство имеет атрибуты
{ [[Writable]]:
false
, [[Enumerable]]: false, [[Configurable]]: false }
.
В ES5 функция перезаписи была удалена:
15.1.1. Свойства свойства
NaN
,Infinity
иundefined
глобального объекта были изменены для свойств только для чтения.
О isFinite
: я однажды разместил question в отношении того, почему библиотека Google Closure реализует пользовательскую функцию для isFinite
, и ответ был таков: вероятно, была некоторая кроссбраузерная несогласованность, хотя неясно, какой браузер и какая несогласованность.