我正在研究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))--
会产生无穷大?
答案 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的对象但是有一些属性被抛入以使其表现很好的数学方法。