前言
我们都知道js中的数据有两大类型,基本数据类型和引用类型,但是我们也知道从逻辑上来说其实基本类型的数据其实并不是对象,也就没有属性和方法,但实际上我们在使用的过程中这些基本类型的数据也是有属性和方法的,其实这主要是依赖于基本包装类型。
理解基本包装类型
那么为什么我们使用的基本类型数据会有方法和属性呢,其实主要是由于基本包装类型的原因,当我们在对基本类型的数据调用一个属性或者方法时其实后台还会有一系列的操作来进行转换,从而能够正确的获取结果,我们可以像下面这样理解:
1
2
3
4{
const str='这是一个字符串';
const len=str.length;
}通过这样的操作我们可以length这个属性来获取到字符串的长度,并且将这个长度赋值给 len 这个变量。、
+但实际上它在后台的操作可以这样进行理解:
1 | { |
通过上面的例子我们就可以很简单的理解基本包装类型了,基本包装类型就像是一个中转站一样,虽然基本类型的数据不是对象,但是通过后台的操作创建一个基本包装类型对象,所以我们调用基本类型的属性或者是方法实际上调用的是基本包装类型的属性或者方法,当调用完毕后再进行销毁,最终我们看到的结果就像是基本数据类型有属性或者是方法一样。
不能给基本类型数据添加属性或者方法
我们可以看出虽然基本类型数据表面上看起来可以调用数据和方法,但是实际上我们也还是不能够给他们添加方法或者是属性,因为他们根本上还是基本类型数据,并且基本包装类型对象在执行完毕后会立即销毁:
1 | { |
可以创建基本包装类型对象
我们可以通过显示调用Boolean、Number、String
来创建基本包装类型对象。
1 | { |
可以看出是可以通过显示的创建基本包装类型对象的,甚至可以直接通过Objct
构造函数自动识别来创建,但是并不推荐通过这种方式来创建基本类型数据,因为这样创建的数据通过typeof
判断的是一个对象,而不是基本数据类型。
特别是在创建Boolean类型数据时尤为要注意:
1 | { |
得到这个结果也并不奇怪,因为通过基本包装类型创建的数据实际上是一个对象,当进行比较运算时,对象都是一律按true
处理的,所以这里并不能得到我们想要的结果。
所以建议永远不要通过实例化构造函数的形式来创建Boolean类型的数据。
总结
基本包装类型很好理解,了解基本包装类型对于对于理解js运作机制也很有帮助,还有就是一些要注意的地方,比如不要不要通过实例化构造函数的形式来创建Boolean类型的数据。