JS包装对象

72 阅读2分钟

对象包装器”对于每种原始类型都是不同的,它们被称为 StringNumberBooleanSymbol 和 BigInt。因此,它们提供了不同的方法。

字符串方法 str.toUpperCase() 返回一个大写化处理的字符串。 toFixed(n) 将数字舍入到给定的精度

为了使它们起作用,创建了提供额外功能的特殊“对象包装器”,使用后即被销毁。

所谓“包装对象”,指的是与数值、字符串、布尔值分别相对应的NumberStringBoolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。

对象是 JavaScript 语言最主要的数据类型,三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”(wrapper)。

NumberStringBoolean这三个原生对象,如果不作为构造函数调用(即调用时不加new),而是作为普通函数调用,常常用于将任意类型的值转为数值、字符串和布尔值。

三个对象作为构造函数使用(带有new)时,可以将原始类型的值转为对象; 作为普通函数使用时(不带有new,可以将任意类型的值,转为原始类型的值。

1.“包装对象”演变过程?

包装对象本质上:就是 临时性“实例对象” 把“原始数值“作为原始对象的参数,new 实例对象,实例对象的”proto“连接到String.prototype中,所以临时性“实例对象” 可以调用属性和方法

Pasted image 20250114153142.png

const s = new String('hello');
typeof s // 'object'
s.charAt(1) // 'e'

// 等价于

'hello'.charAt(1) // 'e'

2.”什么对象“转化为 “包装对象”

'hello'.charAt(1) 
/* 
'e' 上面示例中,字符串hello执行了charAt()方法。
但是,在 JavaScript 语言中,只有对象才有方法,原始类型的值本身没有方法。
这行代码之所以可以运行,就是因为在调用方法时,字符串会自动转为包装对象,charAt()方法其实是定义在包装对象上。
*/

NumberStringBoolean这三个原生对象

const s = new String('hello');
typeof s // 'object'
s.charAt(1) // 'e'

// 等价于 

'hello'.charAt(1) // 'e'

包装对象 是指 JavaScript 为了让原始类型可以调用方法或访问属性,在运行时会自动将原始值包装成对应的对象类型。对于每种原始类型,JavaScript 都定义了对应的包装对象:

  • String:为字符串原始类型提供包装。
  • Number:为数字原始类型提供包装。
  • Boolean:为布尔值原始类型提供包装。

JavaScript 引擎会临时创建一个包装对象,在这个对象上调用方法,调用完成后立刻销毁该对象。

3.“包装对象”的用途是什么?让原始值可以调用属性和方法