JavaScript中的包装对象
本文介绍了JavaScript中的包装对象。
YouTube Video
包装对象
JavaScript 具有基本类型及用于处理它们的对象(包装对象)。
基本类型
原始类型表示一个单一值,它们简单而轻量。这些是不可变的(无法更改的),并且不会直接拥有对象方法或属性,但它们可以暂时转换为包装对象以进行操作。
string 和 number 是原始类型的示例。另一方面,包装对象以大写字母开头,例如 String 和 Number。
包装对象
为了操作原始类型,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()); //
- 您可以使用
Object为Symbol创建一个包装对象,但通常情况下,您会直接使用Symbol原始数据类型。
原始类型和包装对象的区别
- 原始类型 是轻量且内存高效的,但它们本身不具有直接的属性或方法。然而,在 JavaScript 中,即使使用原始类型,必要时也会自动创建临时包装对象以提供方法和属性。
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);- 包装对象 是显式生成的对象,会影响内存和性能,因此通常推荐使用原始类型。
结论
- 基本类型:例如
number、string、boolean、null、undefined和symbol这样轻量级的类型,它们没有直接的方法。 - 包装对象:例如
Number、String和Boolean这样的对象,是由基本类型临时转换而来的。
您可以在我们的YouTube频道上使用Visual Studio Code跟随上述文章进行学习。 请也查看我们的YouTube频道。