Javascript Infinity--(无穷大减去负数)产生无穷大

时间:2013-02-08 17:09:28

标签: javascript infinity

我正在研究JavaScript的数字类型系统。

我正在使用Chrome,当我评估15--一个数字时,我得到一个ReferenceError,因为递减一个常数是没有意义的。

当我按预期评估var x=10;x--;时,一切正常。

期待var a=Infinity;a--评估为Infinity,这一切都有道理并符合to the javascript language spec

然而,令我惊讶的是Infinity--Infinity++评价Infinity与其他文字不同。

Number.POSITIVE_INFINITY也是如此。

tl; dr:

Infinity--15--产生引用错误时,为什么(new Number(15))--会产生无穷大?

2 个答案:

答案 0 :(得分:10)

您的示例中使用的

Infinity实际上不是值,而是指Infinity property of the global object

  

15.1全局对象

     

[...]

     

15.1.1全局对象的值属性

     

[...]

     

15.1.1.2无限
  Infinity的值为+∞(请参阅8.5)。此属性具有{[[可写]]:false,[[可枚举]]:false,[[可配置]]:false}。

因此,Infinity--与完全有效的window.Infinity--相同。

答案 1 :(得分:1)

因为没有数字无穷大这样的东西,所以它是一个概念,因此在编码中它不是作为其他常量构建的,而是作为一个像null或undefined的对象但是有一些属性被抛入以使其表现很好的数学方法。