Бесконечность против числа.POSITIVE_INFINITY - PullRequest
19 голосов
/ 15 декабря 2011

Я понимаю, что Number.POSITIVE_INFINITY имеет значение Infinity, а Number.NEGATIVE_INFINITY имеет значение -Infinity.

Есть ли причина, по которой я бы использовал Number.POSITIVE_INFINITY вместо Infinity или Number.NEGATIVE_INFINITY вместо -Infinity?

В связанной заметке, есть ли какие-либо проблемы с браузером с isFinite?

1 Ответ

20 голосов
/ 15 декабря 2011

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, и ответ состоял в том, что, возможно, была некоторая кросс-браузерная несогласованность, хотя неясно, какой браузер и какое несоответствие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...