(一)任意类型转换为 string:
1.String(), 2.toString() 3.+“”
对于数组:
其他邪门的东西,小编至今未解,如果有哪位兄台了解还望解答下:
(感谢评论区朋友:只要能让js区分出小数点和点运算符,各种写法都可以~)
(二)任意类型转布尔
1.Boolean , 2. !!x
五个falsy值:
ps: 对象永远是true
(三)任意类型转数值 (这里主要是字符串转数值,其他NAN)
1.Number
2.parseInt(1,10)
3.parseFloat()
4.x-0
5.+x 取正
如果字符串含有字母:
(四)四则运算符的强制类型转换
加法运算符:
- 运算中其中一方为【字符串】,那么就会把另一方也转换为字符串
- 如果一方不是字符串或者数字,那么会将它转换为【数字】或者【字符串】
加法规则:有字符串就最终为字符串,其他的优先数值,其次字符串
对于除了加法的运算符来说,都会被转为数字
(五)比较运算符
== 规则
其他没有列在这个表格中的情况都会返回false
toNumber和toPrimitive方法是内部的
toNumber 规则
toPrimitive : 相对于对象,先看 valueOf ,没有就看 toString
=== 规则:值和类型都必须相同
简单类型比较:toNumber
引用类型比较:valueOf > toString
粗暴记法:
- 一方是对象,转string
- 一方时string,转number
- 一方时boolean,转number
- 反正最终都转number
问:
1、(a==1 && a==2 && a==3 && a==4)可能吗?
答:可能。
2、[] == ![] // true
3、[] == !{} // true
4、{} == ![] // false 因为 '[object object]’ !== false, NAN !== 0
5、{} == !{} // false
Appendix:
扩展阅读:JavaScript中的强制类型转换
从206个console.log()完全弄懂数据类型转换的前世今生(上)
从206个console.log()完全弄懂数据类型转换的前世今生(下)
生无可恋了。