JavaScript的无穷大-- (无穷大减去负无穷大) 等于正无穷大。

4
我正在研究JavaScript的数字类型系统。
使用Chrome时,对于数字文字,当我评估15--时,由于减量常量没有意义,所以会得到ReferenceError错误。
当我评估var x=10;x--;时,一切都按预期工作。
如预期的那样,var a=Infinity;a--求值为Infinity,这很合理并且符合Javascript语言规范
然而令我惊讶的是,与其他数字不同,Infinity--Infinity++的求值结果均为InfinityNumber.POSITIVE_INFINITY也是如此。
总之:
为什么Infinity--的结果是无穷大,而15--(new Number(15))--却会产生引用错误?
2个回答

11

Infinity在您的示例中使用时,实际上并不是一个值,而是指全局对象的Infinity属性

15.1 全局对象

[...]

15.1.1 全局对象的值属性

[...]

15.1.1.2 Infinity
Infinity的值是+∞(请参见8.5)。此属性具有以下特性:{[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false}。

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


谢谢!还值得注意的是Infinity.valueOf()--不起作用 :) - Benjamin Gruenbaum

1
因为没有所谓的无限大数字,它是一个概念,在编程中不像其他常量那样被构建,而是作为一个对象,类似于null或undefined,但加入了一些属性以使其与Math方法良好地配合。

1
这实际上与无限大或数字无关,只与JavaScript中符号的解析方式有关。 - Felix Kling
当然有一个无穷大的数。例如,如果您在自然数N下关闭极限运算符并查看级数f(n) = n的极限,则极限的结果是无穷大。此外,我想知道为什么可以对其进行赋值。 - Benjamin Gruenbaum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接