Boolean、Number、String等基本包装类型有着怎样的原理呢?
基本包装类型
,严格来说不属于基本数据类型
和引用类型
中的任意一个,但是又和这两种类型息息相关
引用类型有自己内置的方法,也可以自定义其他方法用来操作数据,而
部分基本数据类型不能像引用类型那样有自己的内置方法对数据进行更多的操作
按照最新 ECMAScript 标准定义,基本数据类型(primitive value)包括 Undefined, Null, Boolean, Number, Symbol, String
基本包装类型和其他引用类型一样,拥有内置的方法可以对数据进行额外操作
为了便于操作基本类型值,ECMAScript 提供了 3 个特殊的引用类型:Boolean、Number和 String。这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据
因此,在js的世界里‘万物皆对象’
下面展示一段案例
const box = 'Mr. Lee';//定义一个字符串 const box2 = box.substring(2);//截掉字符串前两位 console.log(box2);//输出新字符串 . Lee console.log('Mr. Lee'.substring(2));//直接通过值来调用方法
变量 box 是一个字符串类型,而 box.substring(2)又说明它是一个对象(PS:只有对象才会调用方法),最后把处理结果赋值给 box2。'Mr. Lee'是一个字符串类型的值,按道理它不应该是对象,不应该会有自己的方法,但实际上这是行得通的,也就是说它在调用方法的过程被包装成了一个对象
背后包装流程(自动进行)
1.创建包装类型对应实例 (当我们从内存中获取一个基本类型的值时(读取模式),后台自动创建基本包装类型的对象)*
*2.调用实例方法 (内置方法直接调用)
3.销毁实例 (区别于引用类型最主要的是对象的生存期,进本包装类型只存在一行代码的执行期间,然后立即销毁)
//用String构造函数创建一个实例,这个实例是一个对象 const str = new String("text"); // console.log(str); //String {'text'} //对象中有内置方法供开发人员调用 const str2 = str.split(""); //console.log(str2); //(4) ['t', 'e', 'x', 't'] //销毁这个实例 str = null;
最终销毁这个动作,非常符合垃圾回收机制,且意味着我们不能在运行时为基本类型值添加属性和方法
总结
因为有了基本包装类型,所以JS中的基本类型值可以被当作对象来访问; 基本类型特征: 1.每个包装类型都映射到同名的基本类型; 2.在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据操作; 3.操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象;