JavaScript-Number数据类型

Number数据类型是指正数、负数、零这一类的数据。但是在Number里面有一个特殊的数据,是NaN,它表示的是Not a Number,即,不是一个数字。
数字的声明可以如下:

var number = 10;
var number = 10.1;
var number = -10;
var number = 0;

而对于数据的比较,可以如下:

10 > 9;
10 == 10;
10 < 11;

其中,>, ==, <分别代表,大于,等于,小于。在JavaScript中 ==表示的是相等比较。
这里有一个注意点:
** NaN === NaN是不相等的,NaN和任何不相等 **
那如何比较NaN呢?如何判别一个数据是否是数字还是非数字呢?
可以使用JavaScript的一个函数:isNaN()

isNaN(): 检测一个值是否为有效数字,是有效数字,返回false。例如:

isNaN(10); // 返回false
isNaN("abc"); // 返回true

如果检测的类型不是number类型的,浏览器会默认的把它转化成number类型,然后在判断是否为有效数字。

console.log(isNaN('12'));
// -> false 会把'12'转化成number类型的 Number ==> Number("123")

这里的Number()是指 强制将其他的数据类型转化为number类型,要求如果是字符串,字符串中一定都需要是有数字才能转换,如果有非数字的字符,则无法转换。例如:

    console.log(Number('12.5px')); // NaN ->无法转换,有非数字字符px
    console.log(Number('12.5')); // 12.5
    console.log(Number("")); // 0 -> 空字符串转换结果为0

所以分析一下一行代码的情况:

console.log(isNaN("10")); // 返回false

首先,使用isNaN()判断时,它会先将非数字类型强制转换成数字类型,那么“10” --> Number("10"),由于"10"里没有非数字的字符,所以Number("10") --> 10。在对10进行isNaN()操作,显然10是一个数字,所以此时isNaN("10")返回false。


既然Number()是强制转换成数字,那是否有非强制的转换成数字的方法呢?
答案是有的,分别是parseInt()parseFloat()
它们俩的工作原理是:从左到右,一个个字符查找,把是数字的转化为有效的数字,中途如果遇到了一个非有效的数字,就不再继续查找了。
而区别是parseFloat()可以多识别一个小数点。

    console.log(parseInt('12px')); // 12
    console.log(parseInt('12px13')); // 12
    console.log(parseInt('javascript2017')); // NaN
    console.log(parseInt('12.5px')); // 12
    console.log(parseFloat('12.5px')); // 12.5

一道面试题:

    var val = Number('12px'); // 此时val为NaN
    if (val === 12) {
        console.log(12);
    } else if (val === NaN) {  // NaN和任何值不相等
        console.log(NaN);
    } else {
        console.log('以上都不成立'); // 输出
    }

解析:Number('12px'),由于Number()转换数字时,里面的数字只能全是数字字符,否则无法转换返回NaN,所以当传入"12px"时,返回NaN,此时val = NaN;这样第一个if条件不能通过。又因为NaN和任何值都不相等,包括NaN本身,所以 val === NaN不成立。所以输出以上都不成立。

你可能感兴趣的:(JavaScript-Number数据类型)