欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 简单理解js中的包装类

简单理解js中的包装类

2025/4/7 21:07:19 来源:https://blog.csdn.net/Kousii/article/details/144066416  浏览:    关键词:简单理解js中的包装类

前言:

-   在编程语言(如 Java 和 JavaScript)中,包装类(Wrapper Class)是一种将基本数据类

型包装成对象的类。基本数据类型(如`int`、`char`、`boolean`等)不是对象,没有方法和属

性。包装类提供了一种方式,使得基本数据类型可以像对象一样使用,这样就能调用方法来

操作这些数据。

valueof

  • 在 JavaScript 中,valueOf()是一个非常重要的方法,它存在于许多内置对象(如NumberStringBooleanDateObject等)中。该方法的主要作用是返回对象的原始值。具体返回的值根据对象的类型有所不同。
let numObj = new Number(42);
console.log(numObj)
console.log(numObj.valueOf()); 

即使我们使用了new关键字创造出了一个对象,但我们仍然能通过`valueOf()`返回一个数字数据类型

对象进行四则运算

let num1 = new Number(10)//创建了一个数字对象
console.log(num1 * 2)

> 我们都知道的是明明对象是无法参加使用四则运算,但我们new了一个对象却能使用它参加四则运算,这是为什么呢?

> 由于v8引擎在对三种特殊类型对象(string、number、boolean)进行访问时,先会对其valueof,返回原本的类型,因此本行代码并不是对象参与了四则运算而是number数据类型参与了四则运算

字符串添加属性的失败

let str = '10'
str.a = 10
console.log(str.a)

输出undefined,为什么没有报错?而是输出undefined,是由于v8引擎首先在let str时将其转成了new String变成了一个对象,所以str.a是添加了对象的属性,并不会进行报错,而在进行访问的时候仍然需要valueof返回成了一个string类型,由于基本数据类型不能具有方法和属性,会执行delete str.a,删除后值就变成了undefined。

修改字符串的长度

let str = '10'
str.length = 1
console.log(str.length)
let arr = [1, 2, 3]
arr.length = 1
console.log(arr)

同样是string基础数据类型却可以调用方法?为什么?

这是由于同样的str首先v8引擎判断的是一个String对象,而挂载在对象上面的length方法被调用,并没有引起valueof方法,但我们会发现无法对length的值行进修改(如同修改数组的值)时由于改变值时会调用valueof方法因此无法被修改

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词