【JS】基本包装类型

在 ES 中,数据的分类分为基本数据类型和引用类型。
而基本包装类型,严格来讲不属于上面两个中的任意一个,可是又和这两种类型息息相关。javascript

基本数据类型和引用类型这两个类型其中一个很明显的区别是,引用类型有本身内置的方法,也能够自定义其余方法用来操做数据,而基本数据类型不能像引用类型那样有本身的内置方法对数据进行更多的操做。java

但基本数据类型真的没有吗?函数

对于部分基本类型来讲确实是这样的。code

按照最新 ES 标准定义,基本数据类型(primitive value)包括 Undefined, Null, Boolean, Number, Symbol, String。对象

在这 6 个基本数据类型中,其中有 3 个是 ES 提供的特殊引用类型(基本包装类型):Boolean, Number, String。ip

基本包装类型,和其余引用类型同样,拥有内置的方法能够对数据进行额外操做。
以下:内存

let str = 'test'
let str2 = str.substring(2)
console.log(str2) //st

上面 str 变量存储的值是一个字符串,'test' 字符串是基本数据类型 String 类型的值。
按照常理来讲,字符串不是引用类型,因此它不该该有本身的方法,第二行代码应该报错才对。作用域

字符串 'test' 确实不该该有本身的方法,可是在执行第二行代码时,后台会自动进行下面的步骤:
1.自动建立 String 类型的一个实例(和基本类型的值不一样,这个实例就是一个基本包装类型的对象)
2.调用实例(对象)上指定的方法
3.销毁这个实例开发

用代码的方式解释就是以下:字符串

//用 String 构造函数建立一个实例,这个实例是一个对象
let str = new String('test')
//对象中有内置方法供开发人员调用
let str2 = str.substring()
str = null

虽然基本类型的值没有方法能够调用,可是后台临时建立的构造函数实例(也就是对象)上有内置方法可让咱们对值进行操做,所以这样咱们就能够对字符串、数值、布尔值这三种基本数据类型的数据进行更多操做,这也是基本包装类型的主要用处:便于操做基本类型值。

而何时后台会自动建立一个对应的基本包装类型的对象,取决于当前执行的代码是不是为了获取他的值。
每当读取一个基本类型的值,也就是当咱们须要从内存中获取到他的值时(这个访问过程称为读取模式),这时,后台就会自动建立一个基本包装类型的对象。
以下:

let test = 'hhh'
console.log(test) //读取模式,后台自动建立基本包装类型对象
let test2 = test //赋值给变量 test2,也须要读取 test 的值,同上

基本包装类型的对象和引用类型的对象最大的一个区别是,对象的生存期不一样,致使的一个结果就是,基本包装类型没法自定义本身的方法。

对于引用类型的数据,在执行流离开当前做用域以前都会保存在内存中,而对于自动建立的基本包装类型的对象,只存在于一行代码的执行瞬间,执行完毕就会当即被销毁。
以下:

let str = 'test'
str.test = 'hhh'
console.log(str.test) //undefined

上面第二行代码给自动建立的 String 实例对象添加了 test 属性,虽然此刻代码执行时他是生效的,可是在这行代码执行完毕后该 String 实例就会马上被销毁,String 实例的 test 属性也就不存在了。当执行第三行代码时,因为是读取模式,又从新建立了新的 String 实例,而这个新建立的 String 实例没有 test 属性,结果也就是 undefined。

相关文章
相关标签/搜索