对象包装器”对于每种原始类型都是不同的,它们被称为 String、Number、Boolean、Symbol 和 BigInt。因此,它们提供了不同的方法。
字符串方法 str.toUpperCase() 返回一个大写化处理的字符串。 toFixed(n) 将数字舍入到给定的精度
为了使它们起作用,创建了提供额外功能的特殊“对象包装器”,使用后即被销毁。
所谓“包装对象”,指的是与数值、字符串、布尔值分别相对应的Number、String、Boolean三个原生对象。这三个原生对象可以把原始类型的值变成(包装成)对象。
对象是 JavaScript 语言最主要的数据类型,三种原始类型的值——数值、字符串、布尔值——在一定条件下,也会自动转为对象,也就是原始类型的“包装对象”(wrapper)。
Number、String和Boolean这三个原生对象,如果不作为构造函数调用(即调用时不加new),而是作为普通函数调用,常常用于将任意类型的值转为数值、字符串和布尔值。
三个对象作为构造函数使用(带有new)时,可以将原始类型的值转为对象;
作为普通函数使用时(不带有new),可以将任意类型的值,转为原始类型的值。
1.“包装对象”演变过程?
包装对象本质上:就是 临时性“实例对象” 把“原始数值“作为原始对象的参数,new 实例对象,实例对象的”proto“连接到String.prototype中,所以临时性“实例对象” 可以调用属性和方法
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()方法其实是定义在包装对象上。
*/
Number、String和Boolean这三个原生对象
const s = new String('hello');
typeof s // 'object'
s.charAt(1) // 'e'
// 等价于
'hello'.charAt(1) // 'e'
包装对象 是指 JavaScript 为了让原始类型可以调用方法或访问属性,在运行时会自动将原始值包装成对应的对象类型。对于每种原始类型,JavaScript 都定义了对应的包装对象:
- String:为字符串原始类型提供包装。
- Number:为数字原始类型提供包装。
- Boolean:为布尔值原始类型提供包装。
JavaScript 引擎会临时创建一个包装对象,在这个对象上调用方法,调用完成后立刻销毁该对象。