说说NaN和isNaN()

刚刚做了道练习题关于数据类型转换的。把人搞懵了,现在想想还是基本的概念没掌握好。题目如下:

//找到可以转成数字的:'100px', -98765, 34, -2, 0, '300', '23.45元',  5
var arr = [ '100px', 'abc'-6, [], -98765, 34, -2, 0, '300', , function(){alert(1);},
    null, document, [], true, '200px'-30,'23.45元', 5, Number('abc'), function(){ alert(3); },
    'xyz'-90 ];

因为题目要求涉及到字符串和浮点数,所以理所当然的想到了用paresFloat()函数,然后再用typeof操作符判断解析后的数组元素是否等于number类型。如下:

    var arr1=[];
    for (var i=0;i

但运行结果不如人意。

说说NaN和isNaN()_第1张图片
新数组的元素

为什么NaN也存进了新数组。最后查阅了下高程,发现 NaN即非数值是一个特殊的数值,就是它的数据类型也是number**。抱着怀疑的心态验证了下,结果是true。

    alert( typeof NaN=='number');  //true

但看到高程下面的一个例子

alert(isNaN(NaN));  //true

isNaN()可以接收一个参数,该参数可以是任何类型,该函数会帮我们确定这个参数是否‘不是数值’。在接收这个值后,会将某些不是数值的值直接转化为数值。

如果NaN是非数值的一个特殊的数值,那么这按理来说应该是返回一个false啊,什么鬼啊。。。最后才想起今天看妙味视频的时候老师说过,isNaN()将某些不是数值的值转化为数值的机制是借用Number()函数,所以Number(NaN)是转化不成数值的。所以这里应该是返回true。

最后此题被解决了,

    for (var i=0;i

办法不唯一,希望大家能说说其他解法,谢谢。

推荐一波干货十足的前端微信公众号


说说NaN和isNaN()_第2张图片
菲麦前端

你可能感兴趣的:(说说NaN和isNaN())