原始对象和包装对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原始对象和包装对象相关的知识,希望对你有一定的参考价值。

  我们先看段代码:

var s = "Test";
var len=s.length;

  我们知道在javascript中像上面这样声明的字符串不是对象,但既然这里的s不是对象,为什么会有length的属性呢?

  原因是在JavaScript中只要引用了字符串(数字、布尔值也是一样的)的属性,JS就会将字符串通过调用new String(s)的方式转换成对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁(真实实现并不一定是这样,但整个过程看起来是这样)。这个过程就叫包装对象。

  有没有办法验证上面的解释呢,我们来看两段代码:

  代码一:

var s = "Test";
s.len=10;//创建字符串对象,并添加len属性,然后销毁
var t = s.len;//创建字符串对象,读取len属性,由于不存在所以结果是 undefined

  代码二:

var s = new String("Test");
s.len = 10;
var t = s.len;//10

  最后一点需要注意的是,原始对象和包装对象不严格相等:

var s = "Test", S=new String("Test");
console.log(s == S);//true
console.log(s === S);//false

以上是关于原始对象和包装对象的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript - 原始值包装类型

JS中数据类型原始数据内置对象包装类型对象typeof

标准库》第三章 包装对象和Boolean对象

所有原始包装类都是不可变对象吗?

始终为 JPA @Id 使用原始对象包装器而不是原始类型?

js问题(杂)