TL; DR
Infinity
раньше был перезаписываемым; Number.POSITIVE_INFINITY
и Number.NEGATIVE_INFINITY
всегда были только для чтения.
Infinity
- это свойство глобального объекта (window
- это глобальный объект для Javascript, запускаемого в браузере), тогда как Number.POSITIVE_INFINITY
- это свойство конструктора Number
.
До 5-го издания ECMAScript свойства значения глобального объекта можно было перезаписать:
Infinity = 123;
Infinity; // 123
То же самое относится к undefined
и NaN
, которые также являются свойствами глобального объекта и используются для перезаписи.
Свойства конструктора Number
всегда были доступны только для чтения:
Number.POSITIVE_INFINITY = 123;
Number.POSITIVE_INFINITY; // Infinity
Технические характеристики:
ECMAScript 1-е издание (июнь 1997 г.)
15.1.1.2 Infinity
Начальное значение Infinity
равно +∞
.
15.7.3.6 Number.POSITIVE_INFINITY
Значение Number.POSITIVE_INFINITY
равно +∞
.
Это свойство должно иметь атрибуты {DontEnum, DontDelete, ReadOnly}.
ECMAScript 5-е издание (декабрь 2009 г.)
В ES5 свойства значения глобального объекта были сделаны только для чтения:
15.1.1.2 Infinity
Значение Infinity
равно +∞
(см. 8.5).
Это свойство имеет атрибуты { [[Writable]]:
false
, [[Enumerable]]: false, [[Configurable]]: false }
.
Свойства конструктора Number
действительно не изменились, но атрибуты были переименованы:
15.7.3.6 Number.POSITIVE_INFINITY
Значение Number.POSITIVE_INFINITY
равно +∞
.
Это свойство имеет атрибуты { [[Writable]]:
false
, [[Enumerable]]: false, [[Configurable]]: false }
.
Начиная с ES2018 эти определения не изменились.
О isFinite
:
Однажды я опубликовал вопрос о том, почему в Google Closure Library реализована пользовательская функция для isFinite
, и ответ состоял в том, что, возможно, была некоторая кросс-браузерная несогласованность, хотя неясно, какой браузер и какое несоответствие.