Infinity与Number.POSITIVE_INFINITY

时间:2011-12-15 15:23:26

标签: javascript cross-browser numbers

我了解Number.POSITIVE_INFINITY的值为InfinityNumber.NEGATIVE_INFINITY的值为-Infinity

我是否有理由使用Number.POSITIVE_INFINITY代替Infinity,或Number.NEGATIVE_INFINITY代替-Infinity

在相关说明中,isFinite是否存在任何跨浏览器问题?

1 个答案:

答案 0 :(得分:20)

TL; DR

Infinity过去是可以覆盖的; Number.POSITIVE_INFINITYNumber.NEGATIVE_INFINITY一直只读。


Infinity是全局对象的属性(window是浏览器中运行的Javascript的全局对象),而Number.POSITIVE_INFINITYNumber构造函数的属性

在第5版ECMAScript之前,全局对象的值属性能够被覆盖:

Infinity = 123;
Infinity; // 123

这同样适用于undefinedNaN,它们也是全局对象的属性,曾经可以覆盖。

Number构造函数的属性一直是只读的:

Number.POSITIVE_INFINITY = 123;
Number.POSITIVE_INFINITY; // Infinity

规格:

ECMAScript 1st Edition(1997年6月)

  

15.1.1.2 Infinity

     

Infinity的初始值为+∞

     

15.7.3.6 Number.POSITIVE_INFINITY

     

Number.POSITIVE_INFINITY的值为+∞

     

此属性应具有{DontEnum,DontDelete,ReadOnly}属性。

ECMAScript 5th Edition(2009年12月)

在ES5中,全局对象的value属性只读:

  

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

我曾经发布过question关于Google Closure Library为isFinite实现自定义函数的原因,答案是可能存在一些跨浏览器的不一致,尽管不清楚哪个浏览器和哪个不一致。