其他分享
首页 > 其他分享> > JS原始值包装类型

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