Web/04-JavaScript基础/10-包装类.md
2020-05-14 22:17:35 +08:00

4.3 KiB
Raw Blame History

包装类的介绍

我们都知道js中的数据类型包括以下几种。

  • 基本数据类型String、Number、Boolean、Null、Undefined

  • 引用数据类型Object

JS为我们提供了三个包装类

  • String()将基本数据类型字符串转换为String对象。

  • Number()将基本数据类型的数字转换为Number对象。

  • Boolean()将基本数据类型的布尔值转换为Boolean对象。

通过上面这这三个包装类,我们可以将基本数据类型的数据转换为对象

代码举例:

	var num = new Number(3);

	var str = new String("hello");

	var bool = new Boolean(true);

	console.log(typeof num); // 打印结果object

需要注意的是:我们在实际应用中不会使用基本数据类型的对象。如果使用基本数据类型的对象,在做一些比较时可能会带来一些不可预期的结果。

比如说:

	var boo1 = new Boolean(true);
	var boo2 = new Boolean(true);

	console.log(boo1 === boo2); // 打印结果竟然是false

再比如说:

var boo3 = new Boolean(false);

if (boo3) {
	console.log('qianguyihao'); // 这行代码竟然执行了
}

基本数据类型不能绑定属性和方法

属性和方法只能添加给对象,不能添加给基本数据类型。

1、基本数据类型

注意,基本数据类型string无法绑定属性和方法的。比如说:

    var str = "qianguyihao";

    str.aaa = 12;
    console.log(typeof str);  //打印结果为string
    console.log(str.aaa);     //打印结果为undefined

上方代码中,当我们尝试打印str.aaa的时候会发现打印结果为undefined。也就是说不能给 string 绑定属性和方法。

当然我们可以打印str.length、str.indexOf("m")等等。因为这两个方法的底层做了数据类型转换(临时string 字符串转换为 String 对象,然后再调用内置方法),也就是我们在上一篇文章中讲到的包装类

2、引用数据类型

引用数据类型String是可以绑定属性和方法的。如下:

    var strObj = new String("smyhvae");
    strObj.aaa = 123;
    console.log(strObj);
    console.log(typeof strObj);  //打印结果Object
    console.log(strObj.aaa);

打印结果:

内置对象Number也有一些自带的方法比如

  • Number.MAX_VALUE;

  • Number.MIN_VALUE;

内置对象Boolean也有一些自带的方法但是用的不多。

基本包装类型【重要】

当我们对一些基本数据类型的值去调用属性和方法时,浏览器会临时使用包装类将基本数据类型转换为引用数据类型,这样的话,基本数据类型就有了属性和方法,然后再调用对象的属性和方法;调用完以后,再将其转换为基本数据类型。

举例:

var str = 'qianguyihao';
console.log(str.length); // 打印结果11

比如,上面的代码,执行顺序是这样的:

// 步骤1把简单数据类型 string 转换为 引用数据类型  String保存到临时变量中
var temp = new String('qianguyihao);

// 步骤2把临时变量的值 赋值给 str
str = temp;

//  步骤3销毁临时变量
temp = null;

在底层,字符串以字符数组的形式保存

在底层,字符串是以字符数组的形式保存的。代码举例:

	var str = "smyhvae";
	console.log(str.length); // 获取字符串的长度
	console.log(str[2]); // 获取字符串中的第2个字符

上方代码中,smyhvae这个字符串在底层是以["s", "m", "y", "h", "v", "a", "e"]的形式保存的。因此我们既可以获取字符串的长度也可以获取指定索引index位置的单个字符。这很像数组中的操作。

再比如String 对象的很多内置方法,也可以直接给字符串用。此时,也是临时将字符串转换为 String 对象,然后再调用内置方法。

我的公众号

想学习代码之外的技能?不妨关注我的微信公众号:千古壹号idqianguyihao)。

扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外: