装箱、拆箱、隐式类型转换
装箱
把基本数据类型转换为引用类型的操作称为装箱
1 | var s1 = "some text"; |
s1是一个基本类型值,它不是对象,所以它不应该有方法。但是js内部为我们完成了装箱,使得它能够调用方法
实现的机制如下:
(1)创建String类型的一个实例;
(2)在实例上调用指定的方法;
(3)销毁这个实例;
用代码来展现:
1 | var s1 = new String("some text"); |
拆箱
把引用类型转换为基本的数据类型称为拆箱。通过引用类型的valueOf()或者toString()方法来实现的
==的隐式类型转换
注意:若==两边类型相同,不会进行隐式类型转换
规律:对象–>字符串–>数值<–布尔,通过比较数值
对象VS布尔
对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
1 | [] == true; //false []转换为字符串'',然后转换为数字0。true转换为数字1,结果为false |
对象VS字符串
对象转换为字符串
1 | [1,2,3] == '1,2,3' // true [1,2,3]转化为'1,2,3',然后和'1,2,3', 结果为true; |
[1,2,3]转化为’1,2,3’相当于join()
对象VS数值
对象先转换为字符串,然后转换为数字
1 | [1] == 1; // true `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true |
特殊
1 | [] == false; |
两个的结果都是true,第一个是,对象 => 字符串 => 数值0 false转换为数字0
第二个前边多了个!,则直接转换为布尔值再取反,转换为布尔值时,空字符串(‘’),NaN,0,null,undefined这几个外返回的都是true, 所以! []这个[] => true 取反为false
1 | []==![] |
![]转换为false转换为0。[]转换为‘’再转换转换为0。结果为true