理解JavaScript的临时包装对象

Javascript语言中的对象和基础类型string、number、boolean都可以使用“.”符号访问属性和方法,但是本质上只有对象才可以使用“.”,那么基础类型在使用“.”时的内部机制是什么呢?

这里要引入一个概念:包装对象

Javascript对象是一个复合值,他是一组属性和方法的集合,使用“.”符号可以直接访问其属性和方法,但是基础类型数据在使用“.”符号时,*Javascript解析器首先调用基础类型对应的构造函数构建一个临时包装对象,然后再访问包装对象的属性。比如以下代码:

let str = 'string';
str.len = 4;
alert(str.len); //undefined

上述代码中第二行使用“.”为str变量赋值属性len,这时Javascript解析器首先调用构造函数:

let strObj = new String(str);
strObj.len = 4;

属性len的赋值对象实际是字符串对象strOb,而不是字符串值str。随后访问str.len返回值是undefined。strObj便称为包装对象,这个包装对象是临时的,一旦属性的引用和操作执行完毕后便会被回收,也就是说在strObj.len = 4执行完毕后,strObj便被回收,不可再次访问。

number和boolean值也有对应的构造函数Number()和Boolean()。

null和undefined没有包装对象,尝试使用“.”访问它们的属性会报错。

当然也可以手动创建基础类型对应的包装对象,有一点需要注意的是:包装对象和基础类型使用双等号==判断返回true,但是恒等号===返回false。开发过程中需要注意。

posted @ 2015-11-04 15:36  JunpengZ  阅读(989)  评论(0编辑  收藏  举报