装箱转换

例如我们给String的原型加上hello这个方法,然后我们发现在任意一个字符串下都可以找到这个方法

 

这是因为JS引擎有意去模糊“对象”和“基本类型”之间的关系

遇到"."时,JS引擎会临时帮我们做一层“装箱转换”,这里就是 new String() 生成一个“临时对象”

(ps: number的类型JS殷勤没有做装箱)

 

装箱转换

就是基本类型转换成对应的类:

// Number
1
new Number(1)

// String
'aaa'
new String('aaa')

// Boolean
true
new Boolean(true)

Symbol不能new,我们用特殊的方法把它new出来

因为围绕原始数据类型创建一个显式包装器对象从ECMAScript 6开始不再被支持,所以Symbol不能被new了,而其他原始类型的包装器还能用是历史遗留问题了。

推荐阅读:简单了解ES6/ES2015 Symbol() 方法

Object(Symbol('aaa'))
// 或者
(function(){return this}).call(Symbol('aaa'))

 

拆箱转换

JS中拆箱转换是调用了对象的toPrimitive方法来拆箱

它会依次尝试使用valueOf toString来转换

如果没有valueOf toString方法,或者这2个方法转换出来的都是非基本类型,则报错

我们还可以自定义这个拆箱转换的方法

 

 

posted @ 2019-01-26 22:39  张啊咩  阅读(383)  评论(0编辑  收藏  举报