xuesong 2019-06-28
javaScript
类型转换规则javaScript
的类型转换其实一直是很多前端开发人员很迷的地方,一会儿这里要转换,一会儿那里又要转换,总之就是一个大写的迷,因为它隐式类型转换的地方实在是太多了。
但其实它还是有规律可寻的,只要记忆一些基本的转换规则并掌握这些规律,就能很好的理清楚javaScript
隐式类型转换什么时候发生以及它进行怎样的转换。
下面先看看涉及到的几个函数以及他们的转换规则,这个是需要记忆的内容
布尔值
,用到的是Boolean()
数值
,用到的是Number()
,当然还有parseInt()、parseFloat()
,但是对于隐式类型转换的时候,调用的是前者。字符串
,用到的是toString()、String()
Boolean()
对于不同的数据类型,转换规则不一样
Boolean
类型: true -> true
, false -> false
String
类型: 任何非空字符 -> true
, 空字符 -> false
Number
类型: 任何非零数字(包括无穷大) -> true
, 0和NaN -> false
Object
类型: 任何对象啊 -> true
, null(特殊的对象,实质是是Object的派生) -> false
Udefined
类型: 始终为转换为false
Number()
Boolean
类型: true -> 1
, false -> 0
Number
类型: 只是简单的传入和传出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高级程序设计第三版