飞来

有趣的Number(1)

今天继续探讨JS。

话说JS中有个很有趣的类型叫做Number,为什么说它有趣呢?

因为它总是如此出人意料。。额。。

JS中提供了一些常量用于表示特殊值,如NaN、Infinity,NaN表示不是数字,Infinity表示正无穷大。

NaN用于在计算中无法得出解的情况下被得出,如Math.sqrt(-1)、0 / 0等。

NaN是不可直接比较的,它总不等于任何值包括它自己。。

且先看个例子:

NaN == NaN
false

当然,这没啥好玩的。。。判断一个值是不是NaN要用isNaN()嘛,然而isNaN()并不只是在判断NaN的时候会得出true,在对大多数不是数字的值用isNaN进行判断时都会得出true,因为它isNaN(is not a number)嘛。。

isNaN('asdf')
true

isNaN({a:4})
true

isNaN(function () { })
true

上面第一条中,'asdf'这个字符串不是数字,但是并不是所有字符串都isNaN,我们知道,js中,只有数字的字符串跟这个数字是相等的。。。

'1234' == 1234
true

因此,isNaN()对于纯数字的字符串其实是会返回false的。。。另外:

'' == 0
true

因此,对于空字符串也会返回false。

好吧,是不是震惊了,别急,还没完:

isNaN(['123'])
false

isNaN([])
false

这。。。为啥连数组都成数字了呢?

js中,一个数组中若只有一个元素,它其实跟这个元素是相等的。。。

['123'] == 123
true

因此,这也算个数字。

那[]是怎么回事呢:

[] == ''
true

'' == 0
true

[] == 0
true

所以这也算个数字了。

更神奇的是:

isNaN(null)
false

null == 0
false

null * 10
0

额,其实null也应该算0的,但是如果null等于零的话,那么,[]、''就都得等于null了。。所以null其实也是不得已才不等于0的。

看到这儿,是不是已经被js深深折服了呢。。

好吧,最后再来个看起来正常点的:

undefined * 10
NaN

isNaN(undefined)
true

今天就到这里啦,下次来分享Infinity~~

posted on 2013-07-23 19:28  飞来  阅读(182)  评论(0编辑  收藏  举报