2014-08-27 64 views
1

我学习JavaScript,并且在书中的例子:isFinite(Number.MAX_VALUE + 1)是否返回true?

<!DOCTYPE html> 
<html> 
<head> 
    <title>Number Example 2</title> 
    <script type="text/javascript"> 

     var result = Number.MAX_VALUE + 1; 
     alert(isFinite(result)); // the book says it should be false, but I got "true" 

    </script> 

</head> 
<body> 

</body> 
</html> 

我得到的警告消息“真”运行此代码,什么错呢?

+0

'Number.MAX_VALUE + 1 == Number.MAX_VALUE'。 – Bergi 2014-08-27 16:21:43

+2

这本书完全错了。 – 2014-08-27 16:24:18

回答

1

Number.MAX_VALUE加任何其它值返回Number.MAX_VALUE

因此,举例来说,下面的语句是true

Number.MAX_VALUE + 1 === Number.MAX_VALUE + 2 

因为,我们是在它下面的语句也true

Number.MAX_VALUE + 1 === Number.MAX_VALUE + 999999 

在某些时候,声明变为false虽然:

Number.MAX_VALUE + 1 === Number.MAX_VALUE + 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 // true 

但增加一个9回报false

Number.MAX_VALUE + 1 === Number.MAX_VALUE + 9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 // false 

然而,如果我们增加Number.MAX_VALUE本身,它返回如下:

Number.MAX_VALUE + (Number.MAX_VALUE) === Infinity 

它变得有点棘手的是与乘法。当我们乘Number.MAX_VALUE有什么比1更高返回Infinity

Number.MAX_VALUE * 1.00000001 === Infinity 
+3

不可以。尝试使用较大的值。 – Bergi 2014-08-27 16:23:14

+1

'Number.MAX_VALUE + 1 === Number.MAX_VALUE + X'在'X = 1e + 291'和'X = 1e + 292'之间的某处变为false(而Number.MAX_VALUE为1.7976931348623157e + 308') 。 – 2014-08-27 16:28:46