JS 包装类对象

244 阅读3分钟

在 JavaScript 中,基本数据类型(如字符串、数字和布尔值)有相应的包装类对象。这些包装类对象允许基本数据类型具有对象的行为,使得我们可以调用方法和访问属性。

基本数据类型与包装类对象

JavaScript 中有六种基本数据类型:

  1. String
  2. Number
  3. Boolean
  4. Symbol
  5. BigInt
  6. Undefined
  7. Null

前三种(StringNumberBoolean)有对应的包装类对象:StringNumberBoolean

包装类对象的作用

包装类对象允许你对基本数据类型调用方法。例如,你可以对字符串调用方法来获取其长度或转换为大写字母。

示例

字符串

var str = "Hello, world!";
console.log(str.length); // 13
console.log(str.toUpperCase()); // "HELLO, WORLD!"

在上面的例子中,字符串 str 是一个基本数据类型,但我们可以调用 length 属性和 toUpperCase 方法。这是因为 JavaScript 在幕后将 str 包装成一个 String 对象,使得我们可以调用这些方法。

数字

var num = 123.456;
console.log(num.toFixed(2)); // "123.46"

在上面的例子中,数字 num 是一个基本数据类型,但我们可以调用 toFixed 方法。这是因为 JavaScript 在幕后将 num 包装成一个 Number 对象,使得我们可以调用这个方法。

布尔值

var bool = true;
console.log(bool.toString()); // "true"

在上面的例子中,布尔值 bool 是一个基本数据类型,但我们可以调用 toString 方法。这是因为 JavaScript 在幕后将 bool 包装成一个 Boolean 对象,使得我们可以调用这个方法。

自动装箱与拆箱

当你对基本数据类型调用方法或访问属性时,JavaScript 会自动将其装箱(即转换为相应的包装类对象)。当操作完成后,JavaScript 会自动将其拆箱(即转换回基本数据类型)。

自动装箱

var str = "hello";
console.log(str.toUpperCase()); // "HELLO"

在这个例子中,str 是一个基本数据类型的字符串。当我们调用 toUpperCase 方法时,JavaScript 自动将 str 包装成一个 String 对象。

自动拆箱

var num = 42;
var obj = new Number(42);

console.log(num == obj); // true
console.log(num === obj); // false

在这个例子中,num 是一个基本数据类型的数字,而 obj 是一个 Number 对象。当我们使用 == 比较时,JavaScript 会自动拆箱 obj,使得比较结果为 true。但是使用 === 比较时,不会进行自动拆箱,因此结果为 false

创建包装类对象

虽然可以显式地创建包装类对象,但一般不推荐这样做,因为它会导致一些混淆。

var strObj = new String("hello");
var numObj = new Number(123);
var boolObj = new Boolean(true);

console.log(typeof strObj); // "object"
console.log(typeof numObj); // "object"
console.log(typeof boolObj); // "object"

以上代码创建了包装类对象,而不是基本数据类型。

总结

  • 基本数据类型有相应的包装类对象:StringNumberBoolean
  • JavaScript 会自动将基本数据类型装箱为包装类对象,以便调用方法和访问属性。
  • 自动装箱和拆箱机制使得基本数据类型可以像对象一样使用。
  • 虽然可以显式地创建包装类对象,但一般不推荐这样做。