JavaScript 装箱和拆箱

2019-10-16  本文已影响0人  一只野生前端
装箱:\color{grey}{将基本类型装换为相应的对象(装箱又分为显式与隐式)}
隐式装箱

1.读取基本类型的值,后台创建一个临时的该基本类型所对应的对象。
2.对基本类型调用方法,实际是在该基本类型的对象上调用方法。
3.执行方法后该对象立马销毁。


var item = 1234
 item.toString() // '1234'
 // 此代码等价于
 var item = new Number(1234);
 item.toString();
 
 var num = 1234;
 num.toFixed(2) // '1234.00'
 // 此代码等价于
 var num = new Number(1234)
 num.toFiexed(2)
显式装箱
var bool = new Boolean(true)
var Str = new String('123')
拆箱:\color{grey}{将引用类型转化为基本类型}

拆箱内部过程是调用了一个抽象方法toPrimitive(val, type),该方法第一个参数接收转换的参数,第二个参数非必须,
为对象被期待转换的类型. 这个方法的本质是:如果val是object,则会先执行valueOf()方法,如果结果为原始值,
则返回此结果;否则再调用tostring方法;如果得出结果为原始值,则返回结果,否则抛出异常


var num = [1, 2, 3, 4]
console.log(num + 1) // 1,21

//先执行valueOf()方法
num.valueOf() //  [1, 2, 3, 4]

//结果不是原始值,再调用toString方法
num.valueOf().toString() // 1,2,3,4

// 得到基本类型数据
console(num + 1)   //  '1,2,3,4' + 1 = '1,2,3,41'

上一篇下一篇

猜你喜欢

热点阅读