JS原始值包装类型
作者:互联网
引言:为了方便操作原始值,ECMAScript提供了3种特殊的引用类型:Boolean、Number和String。这些类型具有其他引用类型一样的特点,但也具有与各自原始类型对应的特殊行为。每当用到某个原始值的方法或者属性时候,后台都会创建一个相应原始包装类型的对象,从而暴露出操作原始值的各种方法。如下例子:
let s1='some text'; let s2=s1.substring(2);
注意:
正常来说,原始值不是对象,因此逻辑上不应该有方法。而实际上这个例子又按照预期运行了。这是因为后台进行了很多处理,具体来说当第二行访问s1时候,是以读模式访问的,也就是要从内存中读取变量保存的值。在以读模式访问字符串值的任何时候,后台都会执行以下操作。
(1)创建一个String类型的实例。
(2)调用实例上的特定方法。
(3)销毁实例
可以把这三步想象成如下代码:
let s1=new String('some text'); let s2=s1.substring(2) s1=null;
引用类型与原始值包装类型的主要区别在于对象的生命周期。在通过new实例化引用类型后,得到的实例会在离开作用域时候被销毁,而自动创建的原始值包装对象则只存在访问它的那行代码执行期间。这意味着不能在运行给原始值添加属性和方法。如下
let s1='some text'; s1.color='red'; console.log(s1.color); //undefined
另外object构造函数作为一个工厂方法,能够根据传入值的类型返回相应原始值包装类型的实例。
例如
let obj=new object('some text'); console.log(obj instanceof String); //true
如果传给object的是字符串,则会创建一个String的实例。如果是数值,就会创建Number的实例,如果是布尔值则会得到Boolean的实例。
注意:使用new调用原始值包装类型的构造函数,与调用同名的转换函数并不一样。例如:
let value='25'; let number=Number(value); //转换函数 console.log(typeof number) //'number' let obj=new Number(value); //构造函数 console.log(typeof obj) //'object'
虽然不推荐显示创建原始值包装类型的比例,但它们对于操作原始值的功能是很重要的。每个原始值包装类型都有相应的j解决方法。
标签:包装,s1,JS,实例,let,类型,原始 来源: https://www.cnblogs.com/jaetyn/p/16389081.html