美文网首页
一元加,一元减和NaN的判断

一元加,一元减和NaN的判断

作者: 殷灬商 | 来源:发表于2017-10-12 18:51 被阅读19次

    看了一个JS的小东西,就是一元加符号,实际之前也用过,类似隐式类型转换,简单整理一下

    1.数字字符串的转换

    数字字符串转换成纯数字的方法有很多,比如使用parseInt,或者用变量减0,通过隐式类型转换的方式进行操作,现在也可以通过一元加来操作

      var str = "20";
      console.log(typeof +str); // Number
    

    当然这种方式对数字类型是无效的,只适用于纯数字字符串,如果字符串带字符的话,转化的结果是NaN,这种情况还是parseInt比较稳妥,不会出现一些烂七八糟的问题

    它还支持字符串是十六进制的转换,可以直接转换成对应十进制的数字,并且是Number类型,但是不支持二进制和八进制

    var str1 = "0x1a1";
    console.log(+str1); // 417
    

    一元减用法类似,就是把初始值变成负数

    2.日期对象的转换

    当创建一个日期对象的时候,可以直接通过一元加变成这个对象对应的时间戳,省了getTime()这个步骤

    var aa = +new Date(); 
    console.log(aa);   // 1507803182407
    

    3.NaN的严格判断

    在处理各种转换的时候,难免会碰见NaN,而判断NaN的方法有,但是都不是很准确.
    首先在不能使用===或者==来判断,哪怕NaN === NaN返回的结果都是false.
    其次,使用提供的isNaN()进行校验,但是会发现这个方法只适用于纯数字,会返回false,但是要是对字符串,undefined,等进行校验的时候都会返回true,原因是在进行判断之前,先进行了一次隐式类型转换,字符串在转换之后都变成了NaN,从而造成这个方法准确度出现问题
    所以综上,为了能准确的判断NaN,先找到NaN特性,因为它本身是number,而且isNaN()本身对纯数字有效,所以要避免像字符串等变量进行隐式类型转换,参照如下

    function checkNaN(value){
        return typeof value === 'number' && isNaN(value);
    }
    

    这个不严谨的问题到了ES6终于有了妥善的解决方式,ES6拓展了Number的方法,如果在判断NaN话可以使用新的系统方法了

    console.log(Number.isNaN("你好"));  // false
    console.log(Number.isNaN(666))       // false
    

    效果和之前我们写的checkNaN一样,感谢国平的提醒
    最后一句,笑渐不闻声渐悄。多情却被无情恼

    相关文章

      网友评论

          本文标题:一元加,一元减和NaN的判断

          本文链接:https://www.haomeiwen.com/subject/wthoyxtx.html