javaScript
类型转换规则javaScript
的类型转换其实一直是不少前端开发人员很迷的地方,一下子这里要转换,一下子那里又要转换,总之就是一个大写的迷,由于它隐式类型转换的地方实在是太多了。前端
但其实它仍是有规律可寻的,只要记忆一些基本的转换规则并掌握这些规律,就能很好的理清楚javaScript
隐式类型转换何时发生以及它进行怎样的转换。java
下面先看看涉及到的几个函数以及他们的转换规则,这个是须要记忆的内容函数
布尔值
,用到的是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
字符串
类型:spa
011 -> 11
会忽略前面的0oxf
,则将其转换为相同大小的十进制整数NaN
对象
:先调用对象的valueOf()
方法,而后依照前面列举的规则转换返回的值,若是转换的结果是NaN
,再调用对象的toString()
方法,也依照前面的规则转换返回的字符串值toString()、String()
除了null、undefined
,其余数据类型都含有toString()
这个方法,直接调用便可,null、undefined
可用String()
来转换设计
以上规则来源于 javaScript高级程序设计第三版
只要你的数据类型和你使用的操做符所适用的数据类型不一样时(除了相等操做符==、!=
),就会调用前面提到的相应的类型转换方法来进行转换。
若是被转换类型是Object
,那么会先调用自身的valueOf()
,根据状况决定是否继续调用toString()
,并将获得的值传入类型转换方法中。
若是是二元加性操做符(+
),若是有一个值为字符串,那么结果始终为字符串。
若是是关系运算符<、<=、>、>=
,对于两边都是字符串的状况,会比较两个字符串对应的字符编码,而不是将其转换为number
。code
一元操做符++、--
,一元加减操做符+、-
,位操做符~、&、|、^、<<、>>、>>>
,乘性操做符*、/、%
,加性操做符加法+、减法-
,关系操做符<、>、<=、>=
,它们都是对Number
类型的值进行操做,若是发现类型不对,就会调用Number()
来转换。对象
对于操做布尔类型的操做符如!、&&、||
,若是任意一边不是布尔值,则会调用Boolean()
来转换。ip
==、!=
对于相等操做符,它的类型转换就比较复杂了,咱们上面的规则也不适用于它,这里仍是列出来。
这个表展现的是对于不一样类型的组合,是怎么转换的,而且将最终转换的结果使用全等===
来比较。开发
javaScript高级程序设计
上说的很分散并且也不少,没有统一说明,让人很晕,上面是我总结出来的,中间有一个小地方我没指明,由于还没确认,由于我的以为这是一个错误,该错误已上报给出版社,若确认是一个错误,那么我将不会在这里指出,否者我将把这个小知识点添加到本文结语后面部分。上面的数据类型转换归纳的很全面,也很容易理解,但愿对你有帮助。
总结来自 javaScript高级程序设计第三版