JS中的包装类

106 阅读2分钟

1.先来看一道题目:

  将hello 反向输出olleh,也就是我们常说的反向输出。这是一道很简单的题目

function reverseString(str){
        return str.split('').reverse().join('');
    }
console.log(reverseString("hello"));
  • reverseString 函数 :这是一个自定义函数,接受一个字符串 str 作为参数。
  • str.split('') :将字符串拆分为字符数组。例如, "hello" 会被拆分为 ['h', 'e', 'l', 'l', 'o'] 。
  • .reverse() :将数组中的元素反转。例如, ['h', 'e', 'l', 'l', 'o'] 会被反转为 ['o', 'l', 'l', 'e', 'h'] 。
  • .join('') :将反转后的数组重新组合成一个字符串。例如, ['o', 'l', 'l', 'e', 'h'] 会被组合成 "olleh" 。

可能写到这里,就已经结束了,但是让我们仔细思考一下上面的代码str是一个字符串,是简单类型,按理来说应该没有属性和方法,可是为什么可以 str.split('').reverse().join('') 这样来使用呢。 其实啊,JS为我们提供了三个包装类,通过这三个包装类可以将基本数据类型的数据转换为对象

String() - 可以基本数据类型字符串转换为String对象。

Number()- 可以基本数据类型数字转换为Number对象

Boolean()- 可以基本数据类型布尔值转换为Boolean对象

什么是包装类?

一,概念

为了便于操作基本类型值,JS 提供了 三个 特殊的引用类型:Boolean、Number、String(undefined和null没有自己的包装类)。这些类型和其他引用类型相似,但同时 也具备 与各自基本类型相应的特殊行为。 实际上:每当读取一个基本类型值的时候, “后台就会创建一个 对应的基本包装类型的对象”,从能能够调用一些方法来操作这些数据。


var str="hello world";
 //var str = new String("hello world"); // 1.创建出一个和基本类型值相同的对象
 //var long = str.length; // 2.这个对象就可以调用包装对象下的方法,并且返回结给long变量
 //str = null;  //  3.之后这个临时创建的对象就被销毁了

 var long=str.length; //因为str没有length属性 所以执行这步之前后台会自动执行以上三步操作
 console.log(long);   // (结果为:10)

当在执行类似于 str.length 的代码时,JavaScript 引擎会执行以下步骤:

创建包装对象:JavaScript 引擎会创建一个临时的 String 包装对象,将 "hello world" 作为其值。这个对象封装了字符串,并提供了与 String 对象相关的所有方法和属性。

访问属性或调用方法:JavaScript 引擎会使用这个临时的 String 对象来访问 .length 属性或其他方法。这个属性或方法的执行就像是在一个常规的对象上一样。

销毁包装对象:一旦属性被访问或者方法执行完毕,JavaScript 引擎会销毁这个临时的包装对象,回收内存。