JS中的数据类型转换
一、js中的数据类型
js中的数据类型分为基本数据类型和引用数据类型。牵扯到的数据类型转换就有①基本数据类型的类型转换和②引用数据类型的类型转换——这里只讨论隐式转换
二、基本数据类型的类型转换
1、转成Number数字类型
(1)算数运算符:+ - * / %
console.log(1+true);//2
**原理:**调用Number()方法
1+Number(true)–>2
(2)自增自减运算符:++ –
var e=true;
console.log(++e);//2
**原理:**调用Number()方法
++Number(true);–>2
(3)比较运算符:> < >= <= == != === !==
console.log('2'>10)//false
**原理:**调用Number()方法
Number(‘2’)>10–>false
2、转成String字符串类型
使用算数运算符:+
console.log(1+'abc');//'1abc'
**原理:**调用String()方法
String(1)+‘abc’–>‘1abc’
3、转成Boolean布尔类型
使用逻辑非运算符:!
console.log(!1);//false
**原理:**调用Boolean()方法
!Boolean(1)–>false
三、引用数据类型的类型转换
(1)console.log([1,2]=='1,2');//true
**原理:**①调用valueOf()方法
②调用toString()方法
[1,2].valueOf()–>[1,2]
[1,2].toString()–>‘1,2’
(2)var a={};
console.log(a.valueOf().toString());//"[object Object]"
注意:①对象的valueOf()方法是可以重写的
②空数组的调用valueOf()方法会得到空数组
空对象调用valueOf()方法会得到空对象
③空数组调用toString()方法会得到空字符串
空对象调用toString()方法会得到’[object Object]’
(3)console.log([]==0);//true
**原理:**Number([].valueOf().toString())–>0
(4)console.log(![]==0);//true
**原理:**逻辑非!运算符的优先级很高。
!Boolean([])–>false–>0
(5)console.log([]==![])//true
**原理:**运算符左边 [].valueOf().toString()–>’’
运算符右边 !Boolean([])–>false
最后:Number(’’)==Number(false)//true
(6)console.log([]==[]);//false
**原理:**引用类型的对象的值存储在堆中,地址存储在栈中
(7)console.log({}==!{});//false
**原理:**运算符左边 {}.valueOf().toString–>’[object Object]’
运算符右边 !Boolean({})–>false
最后 Number(’[object Object]’) == Number(false);//false
NaN==0//false
(8)console.log({}=={});//false
**原理:**引用类型的对象的值存储在堆中,地址存储在栈中
上一篇: Java8中的流操作-基本使用&性能测试
下一篇: 算法-01-二分查找/插值查找