有趣的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~~