包装类型【待发布】

在之前的介绍中,我们知道了,数据的分类分为基本数据类型和引用类型。

而基本包装类型,严格来说不属于上面两个中的任意一个,但又和两种类型关系米希尔。

我们回忆一下,基本类型和引用类型最大的区别是什么?

let person = {
  name: "Codereasy",
  age: 30,
  celebrateBirthday: function() {
    this.age += 1;
    console.log(this.name + " is now " + this.age + " years old!");
  }
};

person.celebrateBirthday(); // 输出:Codereasy is now 31 years old!

但基本数据类型真的就不能使用方法吗?

let number = 42;
console.log(number.toString()); // 输出:"42"

上面的 Number 是一个基本类型,但是它却能调用 toString() 的方法。

按照常理来说,字符串不是引用类型,所以它不应该有自己的方法,第二行代码应该报错才对。:

  1. 自动创建 Number 类型的一个实例(和基本类型的值不同,这个实例就是一个基本包装类型的对象)
  2. 调用实例(对象)上指定的方法
  3. 销毁这个实例
let number = 42;
let tempNumberObject = new Number(number);
console.log(tempNumberObject.toString()); // 输出:"42"

基本类型的值虽然没有方法可以调用,但是后台临时创建的包装对象上有内置方法可以让我们调用方法,因此这样我们就可以对字符串、数值、布尔值这三种基本数据类型的数据进行更多操作。

包装类型和引用类型的不通之处

通过之前的例子介绍,大家可能会有一个误解。包装类型是不是就是把基本类型变成了引用类型?它本质上就是一个引用类型?其实不是,包装类型很想引用类型,但他的生命周期和引用类型有很大区别。

let person = {
  name: "codereasy",
  age: 30
};

person.myProperty = "hello";
console.log(person.myProperty); // 输出:"hello"

但是如果你给包装类型添加属性

let number = 42;
number.myProperty = "hello";
console.log(number.myProperty); // 输出:undefined

由于基本包装类型的对象仅在执行瞬间存在,因此无法向其添加属性。相反,引用类型的对象会持续存在,直到它们不再被引用并被垃圾收集器回收,所以你可以向它们添加属性。

你可能感兴趣的:(前端,javascript,开发语言,ecmascript)