小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
在日常开发中,类型转换的问题一直伴随着我们的代码编程,无论是框架、库的编写,还是业务开发中,类型转换的操作都是必不可少的,时不时的就会需要我们主动进行强制类型转换或者隐式类型转换,因此在类型转换时需要留个心眼,免得留下难以排查的问题(亲身经历多次,每次都排查的很痛苦😂😂😂)
强制类型转换
强制类型转换方式: 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熟练掌握之后便可以愉快的开发