强制类型转换

866 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

在日常开发中,类型转换的问题一直伴随着我们的代码编程,无论是框架、库的编写,还是业务开发中,类型转换的操作都是必不可少的,时不时的就会需要我们主动进行强制类型转换或者隐式类型转换,因此在类型转换时需要留个心眼,免得留下难以排查的问题(亲身经历多次,每次都排查的很痛苦😂😂😂)

强制类型转换

强制类型转换方式: Number、parseInt、parseFloat、String、Boolean等

这几种方法都比较类似,都是通过自身的方法来进行数据类型的强制转换,接下来看一看Number和Boolean的强制转换

Number方法的强制转换规则:

  • 如果是布尔值,true 和 false 分别被转换为 1 和 0;
  • 如果是数字,返回自身;
  • 如果是 null,返回 0;
  • 如果是 undefined,返回 NaN;
  • 如果是字符串,遵循以下规则:如果字符串中只包含数字(或者是 0X / 0x 开头的十六进制数字字符串,允许包含正负号),则将其转换为十进制;如果字符串中包含有效的浮点格式,将其转换为浮点数值;如果是空字符串,将其转换为 0;如果不是以上格式的字符串,均返回 NaN;
  • 如果是 Symbol,抛出错误;
  • 如果是对象,并且部署了 [Symbol.toPrimitive] ,那么调用此方法,否则调用对象的 valueOf() 方法,然后依据前面的规则转换返回的值;如果转换的结果是 NaN ,则调用对象的 toString() 方法,再次依照前面的顺序转换返回对应的值

接下来请自我分析一下输出

Number(null);     // 0
Number('');       // 0
Number(true);     // 1
Number(false);    // 0

Boolean方法的强制转换规则:

转换为false: undefined、 null、 false、 ''、 +0、-0、 NaN

除了上述7种转换为false之外,其余全部为true

Boolean(0);          //false
Boolean(null);       //false
Boolean(undefined);  //false
Boolean(NaN);        //false
Boolean(1);          //true
Boolean(13);         //true
Boolean('12');       //true

强制类型转换较为简单,只需要将几个常见的API熟练掌握之后便可以愉快的开发