Front-end developmenter必看,超实用的javaScript隐式类型转换规则记忆技巧。

javaScript类型转换规则

javaScript的类型转换其实一直是不少前端开发人员很迷的地方,一下子这里要转换,一下子那里又要转换,总之就是一个大写的迷,由于它隐式类型转换的地方实在是太多了。前端

但其实它仍是有规律可寻的,只要记忆一些基本的转换规则并掌握这些规律,就能很好的理清楚javaScript隐式类型转换何时发生以及它进行怎样的转换。java

下面先看看涉及到的几个函数以及他们的转换规则,这个是须要记忆的内容函数

类型转换须要使用到的函数

  • 对于布尔值,用到的是Boolean()
  • 对于数值,用到的是Number(),固然还有parseInt()、parseFloat(),可是对于隐式类型转换的时候,调用的是前者。
  • 对于字符串,用到的是toString()、String()

Boolean()

对于不一样的数据类型,转换规则不同编码

  1. Boolean类型: true -> true, false -> false
  2. String类型: 任何非空字符 -> true, 空字符 -> false
  3. Number类型: 任何非零数字(包括无穷大) -> true, 0和NaN -> false
  4. Object类型: 任何对象啊 -> true, null(特殊的对象,实质是是Object的派生) -> false
  5. Udefined类型: 始终为转换为false

Number()

  1. Boolean类型: true -> 1, false -> 0
  2. Number类型: 只是简单的传入和传出
  3. null: 返回0
  4. Udefined类型: 返回NaN
  5. 字符串类型:spa

    • 若字符串中只包含数字(包含正负号),则将其转换为十进制数,注意011 -> 11会忽略前面的0
    • 若是字符串中包含有效的浮点格式,如'1.1',则将其转换为对应的浮点数值(一样也会忽略前导零)
    • 若是字符串包含有效的十六进制格式,例如oxf,则将其转换为相同大小的十进制整数
    • 若是字符串是空的,转换为0
    • 若是字符串包含上述格式以外的字符,则将其转换为NaN
  6. 对象:先调用对象的valueOf()方法,而后依照前面列举的规则转换返回的值,若是转换的结果是NaN,再调用对象的toString()方法,也依照前面的规则转换返回的字符串值

toString()、String()

除了null、undefined,其余数据类型都含有toString()这个方法,直接调用便可,null、undefined可用String()来转换设计

以上规则来源于 javaScript高级程序设计第三版

那何时进行隐式类型转换呢?

规则

只要你的数据类型和你使用的操做符所适用的数据类型不一样时(除了相等操做符==、!=),就会调用前面提到的相应的类型转换方法来进行转换。
若是被转换类型是Object,那么会先调用自身的valueOf(),根据状况决定是否继续调用toString(),并将获得的值传入类型转换方法中。
若是是二元加性操做符(+),若是有一个值为字符串,那么结果始终为字符串。
若是是关系运算符<、<=、>、>=,对于两边都是字符串的状况,会比较两个字符串对应的字符编码,而不是将其转换为numbercode

数值类型操做符

一元操做符++、--,一元加减操做符+、-,位操做符~、&、|、^、<<、>>、>>>,乘性操做符*、/、%,加性操做符加法+、减法-,关系操做符<、>、<=、>=,它们都是对Number类型的值进行操做,若是发现类型不对,就会调用Number()来转换。对象

布尔操做符

对于操做布尔类型的操做符如!、&&、||,若是任意一边不是布尔值,则会调用Boolean()来转换。ip

相等操做符==、!=

对于相等操做符,它的类型转换就比较复杂了,咱们上面的规则也不适用于它,这里仍是列出来。
这个表展现的是对于不一样类型的组合,是怎么转换的,而且将最终转换的结果使用全等===来比较。开发

clipboard.png

结语

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

总结来自 javaScript高级程序设计第三版
相关文章
相关标签/搜索