js的包装对象

在另一篇文章 js的new运算符详解 提到过包装对象,这里详细解释下。

我们之前说string、number 和 boolean 这三个原始类型对应的 new String()、new Number() 和 new Boolean() 被创建出来的特别被称为 包装对象。那么单独的 String()、Number()和Boolean() 是当做普通的类型转换函数使用的。

例如下面 new String() 包装对象的这个声明:

var s='string';
var sobj=new String('string');
console.log(s==sobj);
console.log(s===sobj)
console.log(typeof s);
console.log(typeof sobj);
终端输出

可以看到两个变量的值是相等的所以第一个 log 返回 true,第二个全等运算符判断就返回了 false,看下两个类型其实分别为 string 和 object。

那这里这里有奇怪的地方,既然变量 s 的类型是 string,为什么我们可以用 s.length 等这种对象属性访问的方式去得到字符创长度呢?

那是因为我们在使用 s.length 这个属性方法的时候 js 会自动 先把 s 通过 new String() 转换成包装对象,待得到 length 这个属性值的时候又会恢复原来的 string 类型,这个过程对我们不可见,就这么理解就可以了。

同时这就解释了当我们尝试给 string 类型的 s 添加属性的时候不报错却读不到,因为创建后又被还原了。一般来说我们用不到 new String()、new Number() 和 new Boolean(),这么了解就可以了。

感谢阅读,喜欢的话点个赞吧:)
更多内容请关注后续文章。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。