我了解Number.POSITIVE_INFINITY
的值为Infinity
,Number.NEGATIVE_INFINITY
的值为-Infinity
。
我是否有理由使用Number.POSITIVE_INFINITY
代替Infinity
,或Number.NEGATIVE_INFINITY
代替-Infinity
?
在相关说明中,isFinite
是否存在任何跨浏览器问题?
答案 0 :(得分:20)
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
15.1.1.2
Infinity
Infinity
的初始值为+∞
。15.7.3.6
Number.POSITIVE_INFINITY
Number.POSITIVE_INFINITY
的值为+∞
。此属性应具有{DontEnum,DontDelete,ReadOnly}属性。
在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
实现自定义函数的原因,答案是可能存在一些跨浏览器的不一致,尽管不清楚哪个浏览器和哪个不一致。