js中的包装类,无形中的有形,你真的懂了吗?
前言
在js中,包装类并不是一个类的名字,而是网页V8引擎中的一种机制,用于将基本数据类型(除了Undefined,null,因为这两种数据类型没有构造方法)转换为引用数据类型,使得这些数据类型能够拥有引用数据类型的方法和属性,就像普通的js种的对象一样。包装类主要有三种 -->Number、String、Boolean,这些包装类主要是为了使用者能够更加方便地操作基本数据类型的值所提供的特殊对象,但是在实际调用基本数据类型的值时,它不能算是一个对象。
实例
接下来的例子会带你见识包装类的存在以及它的作用
在这两行代码中,按照正常的逻辑,基本数据类型是不是应该没有属性,所以在num上加.a是不是就是一个错误的用法,按理来说控制台应该要输出报错信息。
但是控制台并没有像我们想象中的那样输出,而是输出值未找到undefined
从这个例子我们就能看出,基本数据类型其实不那么'基本',而是携带着对象的属性,而在V8引擎运行js代码时,会在基本数据类型声明之后,创建一个隐式的包装类,会将数字包装成Number类,字符串包装成String类,布尔类型包装成Boolean,new出了一个隐式的包装类对象。注意:在基本数据类型上不能挂你额外加上的属性,在上面的例子中如果在num.a上赋值,则赋值不会生效
包装类的存在带来了什么好处
1、 面向对象的接口:基本数据类型通过包装类获得了面向对象的接口,允许它们像对象那样调用方法。这意味着你可以对一个简单的字符串执行诸如.toUpperCase()
这样的操作,而不需要显式地将其转换为一个完整的对象实例。这使得代码更加自然、简洁且易于阅读。(如下)
2. 动态方法调用:包装类使得在基本数据类型上调用方法成为可能,这一过程是透明的,开发者无需关心何时创建或销毁包装对象。JavaScript引擎会在需要时自动进行包装和拆包操作,简化了开发者的工作。
3. 统一操作方式:通过包装类,所有数据(无论是原始类型还是复杂对象)都可以用一致的方式处理,即都可以调用方法和访问属性。这统一了操作模式,提高了代码的一致性。
4.操作后进行拆包:并且包装类在进行完操作之后将操作后的结果回退到其原始基本数据类型的形式。这个过程保证了基本类型值的透明性,使得它们在使用时仍然表现为简单值,而不是复杂的对象结构。
例如下列String.prototype原型中定义的多种方法str都能够调用,使得基本数据类型也能够有引用数据类的操作。
小结
包装类是js语法中不可忽略的大山,它不仅简化了编程任务,提高了代码的灵活性,还增强了语言的表达力,使得开发者能够以更自然、高效的方式处理数据,它能够使我们现在的工作能够更加顺畅地进行,让我们能够像使用对象的方式来使用基本数据类型,并且在输出时不会是对象的困扰,理解JavaScript中的包装类对于深入学习语言的运行机制和进行高效编码是非常有帮助的。
如果你觉得本文对你有帮助,请留下一个宝贵的赞❤,并且可以在评论区留下你的看法
转载自:https://juejin.cn/post/7376925694612357170