包装类型是指将基本数据类型(如字符串、数字、布尔值)转换为对应的引用数据类型的过程。
JavaScript 在访问基本数据类型值的时候会自动创建对应的包装对象,以便调用对象的方法和访问属性。这种自动创建包装对象的过程称为包装。
1. 字符串包装类型(String):
let str = "hello";
// 在调用字符串的方法时,JavaScript 会自动将 str 包装为 String 对象
console.log(str.length); // 输出 5,调用 String 对象的 length 属性
2. 数字包装类型(Number):
let num = 42;
// 在调用数字的方法时,JavaScript 会自动将 num 包装为 Number 对象
console.log(num.toFixed(2)); // 输出 "42.00",调用 Number 对象的 toFixed 方法
3. 布尔包装类型(Boolean):
let bool = true;
// 在需要使用布尔值的对象方法时,JavaScript 会自动将 bool 包装为 Boolean 对象
console.log(bool.valueOf()); // 输出 true,调用 Boolean 对象的 valueOf 方法
包装类型的使用注意事项:
- 包装对象是临时创建的:当访问基本数据类型的属性或方法时,JavaScript 会临时创建(new)对应的包装对象,内容和基本类型一样,操作完并访问后,这些对象会立即被销毁,不会影响原始的基本数据类型值,再次访问就是 undefined。
let str = 'asd'
console.log(str.includes('a'))
/**
* 过程实现:
* let _str = new String('sad')
* _str.includes('a')
* _str = null
*/
// let _str = new String('sad')
// console.log(_str.includes('a')) // true
// _str = null
// console.log(_str) // null
- 如果原型上不存在的方法不可以使用,不可以在对象身上进行动态添加,但是可以在原型身上动态添加。
// let str = 'asd'
// str.test = 'hello'
// console.log(str.test) // undefined
/**
* 实现过程:
* let _str = new String('asd')
* _str.test = 'hello'
* _str.test = null
*/
let str = 'asd'
String.prototype.test = 'hello'
console.log(str.test) // hello
let str = new String('asd')
str.test = 'hello'
console.log(str.test) // hello
当然也可以自己手动创建:
let str = "hello";
// 手动创建 String 对象
let strObj = new String(str);
console.log(strObj.length); // 输出 5