基本数据类型
1、数字(number)
2、字符串(string)
3、布尔(boolean)
4、空(null)
5、未定义(undefined)
引用类型
对象(object)
普通对象
数组对象(Array)
正则(RegExp)
日期对象(Date)
函数(function)
把其他数据类型转换为number
- 需要转换的情况
1、isNaN检测,当检测的值不是数字类型,浏览器会自己调用Number方法先把它转换为数字,然后在检测是否为非有效数字
2、基于parseInt / parseFloat手动转换为数字类型(与Number区别在于字符串转化分析上,parseInt把字符串中整数部分解析出来,parseFloat把一个字符串中小数部分也解析出来。从字符串最左边开始查找有效数字字符并转换为数字,但遇到非有效数字字符查找结束)
3、数学运算:+ - * / %,但是“+”不仅仅是数学运算还可能是字符串拼接。但是 i++ 就是单纯的数学运算不是字符串拼接
4、基于“==”比较,有时候也会把其它值转换为数字类型 - 转换规律
1、字符串转数字
转换方法:Number(浏览器自行转换都是基于这个方法)
只要遇到一个非有效数字字符,结果都是NaN,空字符串是0
2、布尔转换数字
true => 1 false => 0
3、没有转换为数字
null => 0 undefined => NaN
4、引用类型转换数字
首先都转换为字符串(toString),然后再转换为数字
把其它类型值转换为字符串
- 需要转换的情况
1、基于alert / confirn / prompt / document.write等方法输出内容的时候,会把输出的值转换为字符串再输出
2、基于“+”字符串拼接
3、把引用值转化为数字的时候,首先会转换为字符串,然后再转换数字
4、给对象设置属性名,如果不是字符串,首先转换为字符串,然后再当作属性存储到对象中
5、手动调用toString / toFixed / join / String等方法 还有更多.... - 转换规律
除了对象,都是理解的转换结果加双引号或单引号“” / ‘’
对象转换结果是 "[object Object]"
......
把其它类型换为布尔类型
- 需要转换的情况
1、基于 ! / !! / Boolean等方法转换
!:先把其他数据类型转化为布尔类型然后取反
!!:同样把其他数据类型转化为布尔类型然后取反两次
2、条件判断中的条件最后都会转换为布尔类型
...... - 转换规律
只有空字符串、0、null、undefined、NaN转换结果是false,其余都转换为true
特殊情况:数学运算和字符串拼接“+”
当表达式中出现字符串就是字符串拼接,否则就是数学运算
1 + true // 数学运算结果为2
“1” + true // 字符串凭借结果为"1true"
[12] + 10 // 虽然没有看见字符串,但是引用类型转换数字首先转换为字符串,所借就是字符串拼接。结果为"1210"
({}) + 10 // 结果为"[object Object]10"
[] + 10 // 结果为“10”
{} + 10 // 结果是10,因为{}代表代码块, +10才是我们的操作,严格写法{}; +10
特殊情况:“==”进行比较的时候,如果左右两边的数据类型不一样,则先转换为相同类型,再进行比较
对象 == 对象:不一定相等,因为对象操作的是引用地址,地址不同则不相等
对象 == 数字:把对象转换为数字
对象 == 布尔:把对象转换为数字,把布尔也转换为数字
对象 == 字符串:把对象转换为数字,把字符串也转换为数字
字符串 == 数字:字符串转换为数字
字符串 == 布尔:都转换为数字
布尔 == 数字:布尔转换为数字
不同情况的比较都是把其它值转换为数字再进行比较
null == undefined:true
null === undefined:false
null && undefined和谁都不相等
NaN == NaN:和谁都不相等包括自己结果为 false
[] == true //都转换为数字 ==> 0 == 1结果为false
[] == false //都转换为数字 ==> 0 == 0结果为true
![] == true //先计算![],把数组转换为布尔取反 ==> false == false结果为false
![] == false //false == false结果为true
网友评论