xuesong 2019-06-28
javaScript类型转换规则javaScript的类型转换其实一直是很多前端开发人员很迷的地方,一会儿这里要转换,一会儿那里又要转换,总之就是一个大写的迷,因为它隐式类型转换的地方实在是太多了。
但其实它还是有规律可寻的,只要记忆一些基本的转换规则并掌握这些规律,就能很好的理清楚javaScript隐式类型转换什么时候发生以及它进行怎样的转换。
下面先看看涉及到的几个函数以及他们的转换规则,这个是需要记忆的内容
布尔值,用到的是Boolean()数值,用到的是Number(),当然还有parseInt()、parseFloat(),但是对于隐式类型转换的时候,调用的是前者。字符串,用到的是toString()、String()Boolean()对于不同的数据类型,转换规则不一样
Boolean类型: true -> true, false -> falseString类型: 任何非空字符 -> true, 空字符 -> falseNumber类型: 任何非零数字(包括无穷大) -> true, 0和NaN -> falseObject类型: 任何对象啊 -> true, null(特殊的对象,实质是是Object的派生) -> falseUdefined类型: 始终为转换为falseNumber()Boolean类型: true -> 1, false -> 0Number类型: 只是简单的传入和传出null: 返回0Udefined类型: 返回NaN字符串类型:
011 -> 11会忽略前面的0oxf,则将其转换为相同大小的十进制整数NaN对象:先调用对象的valueOf()方法,然后依照前面列举的规则转换返回的值,如果转换的结果是NaN,再调用对象的toString()方法,也依照前面的规则转换返回的字符串值toString()、String()除了null、undefined,其他数据类型都含有toString()这个方法,直接调用即可,null、undefined可用String()来转换
以上规则来源于javaScript高级程序设计第三版
只要你的数据类型和你使用的操作符所适用的数据类型不同时(除了相等操作符==、!=),就会调用前面提到的相应的类型转换方法来进行转换。
如果被转换类型是Object,那么会先调用自身的valueOf(),根据情况决定是否继续调用toString(),并将得到的值传入类型转换方法中。
如果是二元加性操作符(+),如果有一个值为字符串,那么结果始终为字符串。
如果是关系运算符<、<=、>、>=,对于两边都是字符串的情况,会比较两个字符串对应的字符编码,而不是将其转换为Number。
一元操作符++、--,一元加减操作符+、-,位操作符~、&、|、^、<<、>>、>>>,乘性操作符*、/、%,加性操作符加法+、减法-,关系操作符<、>、<=、>=,它们都是对Number类型的值进行操作,如果发现类型不对,就会调用Number()来转换。
对于操作布尔类型的操作符如!、&&、||,如果任意一边不是布尔值,则会调用Boolean()来转换。
==、!=对于相等操作符,它的类型转换就比较复杂了,我们上面的规则也不适用于它,这里还是列出来。
这个表展示的是对于不同类型的组合,是怎么转换的,并且将最终转换的结果使用全等===来比较。

javaScript高级程序设计上说的很分散而且也很多,没有统一说明,让人很晕,上面是我总结出来的,中间有一个小地方我没指明,因为还没确认,因为个人觉得这是一个错误,该错误已上报给出版社,若确认是一个错误,那么我将不会在这里指出,否者我将把这个小知识点添加到本文结语后面部分。上面的数据类型转换概括的很全面,也很容易理解,希望对你有帮助。
总结来自javaScript高级程序设计第三版