JavaScript中的包装对象

JavaScript中的包装对象

本文介绍了JavaScript中的包装对象。

YouTube Video

包装对象

JavaScript 具有基本类型及用于处理它们的对象(包装对象)。

基本类型

原始类型表示一个单一值,它们简单而轻量。这些是不可变的无法更改的),并且不会直接拥有对象方法或属性,但它们可以暂时转换为包装对象以进行操作。

stringnumber 是原始类型的示例。另一方面,包装对象以大写字母开头,例如 StringNumber

包装对象

为了操作原始类型,JavaScript 会临时生成包装对象(Object 包装)。包装对象包含原始类型的方法和属性。

Number

1let numObject = new Number(42);   // Wrapper object
2
3console.log(typeof numObject);    // object
4console.log(numObject.valueOf()); // 42
5
6let numValue = Number(42);        // Return primitive value
7
8console.log(typeof numValue);     // number
9console.log(numValue);            // 42
  • Number 是一种 包装原始类型 number 的对象类型。通过显式创建一个 Number 对象,您可以像处理 number 一样操作数字,但通常建议使用原始的 number 类型。

typeof numObject"object",但typeof 42"number"

  • 需要注意,使用 new 操作符生成一个新的包装对象与将 Number 作为函数调用会产生不同的结果。当被作为函数调用时,会返回基本类型number

String

1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject);    // object
4console.log(strObject.valueOf()); // Hello
  • 它是一种 包装原始类型 string 的对象类型。通过使用 String 对象,您可以访问字符串的属性和方法,但通常会使用原始 string 类型。

typeof strObject"object",但typeof "Hello""string"

  • Number 类似,将 String 作为函数调用时会返回一个原始的 string

Boolean

1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject);    // object
4console.log(boolObject.valueOf()); // true
  • 它是一种 包装原始类型 boolean 的对象类型。您也可以显式创建一个 Boolean 对象,但通常会使用原始的 boolean 类型。

typeof boolObject"object",但typeof true"boolean"

  • Number 类似,将 Boolean 作为函数调用时会返回一个原始的 boolean

BigInt

 1let bigIntObject = Object(9007199254740991n); // Wrapper object
 2
 3console.log(typeof bigIntObject);    // object
 4console.log(bigIntObject.valueOf()); // 9007199254740991n
 5
 6let bigIntValue = BigInt(9007199254740991);   // Return primitive BigInt
 7
 8console.log(typeof bigIntValue);     // bigint
 9console.log(bigIntValue);            // 9007199254740991n
10
11// Error
12let bigIntObject2 = new BigInt(9007199254740991n);
  • Objectを使ってBigIntのラッパーオブジェクトを生成できますが、通常はプリミティブ型のbigintを直接使うのが一般的です。

typeof bigIntObject"object"であるのに対し、typeof 9007199254740991n"bigint"です。

  • BigIntを関数として呼び出すとプリミティブなbigintを返しますが、new演算子をつけてBigIntのラッパーオブジェクトを生成することはできません。

Symbol

1let symObject = Object(Symbol("id")); // Wrapper object for Symbol
2
3console.log(typeof symObject);    // object
4console.log(symObject.valueOf()); //
  • 您可以使用 ObjectSymbol 创建一个包装对象,但通常情况下,您会直接使用 Symbol 原始数据类型。

原始类型和包装对象的区别

  • 原始类型 是轻量且内存高效的,但它们本身不具有直接的属性或方法。然而,在 JavaScript 中,即使使用原始类型,必要时也会自动创建临时包装对象以提供方法和属性。
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);
  • 包装对象 是显式生成的对象,会影响内存和性能,因此通常推荐使用原始类型。

结论

  • 基本类型:例如 numberstringbooleannullundefinedsymbol 这样轻量级的类型,它们没有直接的方法。
  • 包装对象:例如 NumberStringBoolean 这样的对象,是由基本类型临时转换而来的。

您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。

YouTube Video