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解决方法。

posted @   Jaetyn  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示