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

2017-10-12  本文已影响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一样,感谢国平的提醒
最后一句,笑渐不闻声渐悄。多情却被无情恼

上一篇下一篇

猜你喜欢

热点阅读