装箱:就是把基本类型转变为对应的对象。装箱分为隐式和显示
-
隐式装箱: 每当读取一个基本类型的值时,后台会创建一个该基本类型所对应的对象。在这个基本类型上调用方法,其实是在这个基本类型对象上调用方法。这个基本类型的对象是临时的,它只存在于方法调用那一行代码执行的瞬间,执行方法后立刻被销毁。
let num=123; num.toFixed(2); // '123.00'//上方代码在后台的真正步骤为 var c = new Number(123); c.toFixed(2); c = null;
(1)创建一个 Number 类型的实例。
(2)在实例上调用方法。
(3)销毁实例。
显式装箱: 通过内置对象 Boolean、Object、String 等可以对基本类型进行显示装箱。
var obj = new String('123');
拆箱
拆箱与装箱相反,把对象转变为基本类型的值。拆箱过程内部调用了抽象操作 ToPrimitive 。该操作接受两个参数,第一个参数是要转变的对象,第二个参数 PreferredType 是对象被期待转成的类型。第二个参数不是必须的,默认该参数为 number,即对象被期待转为数字类型
-
Number 转化为对象
1.先调用对象自身的valueOf方法。如果返回原始类型的值,则直接对该值使用Number函数,返回结果。
2.如果valueOf返回的还是对象,继续调用对象自身的toString方法。如果toString返回原始类型的值,则对该值使用Number函数,返回结果。
3.如果toString返回的还是对象,报错。
Number([1]); //1 转换演变: [1].valueOf(); // [1]; [1].toString(); // '1';Number('1'); //1
-
String 转化为对象
1.先调用对象自身的toString方法。如果返回原始类型的值,则对该值使用String函数,返回结果。
2.如果toString返回的是对象,继续调用valueOf方法。如果valueOf返回原始类型的值,则对该值使用String函数,返回结果。
3.如果valueOf返回的还是对象,报错。
String([1,2]) //"1,2" 转化演变: [1,2].toString(); //"1,2" String("1,2"); //"1,2"
-
Boolean 转化对象
Boolean转换对象很特别,除了以下六个值转换为false,其他都为true
undefined null false 0(包括+0和-0) NaN 空字符串('') Boolean(undefined) //false Boolean(null) //false Boolean(false) //false Boolean(0) //false Boolean(NaN) //false Boolean('') //false Boolean([]) //true Boolean({}) //true Boolean(new Date()) //true