Обёрточные объекты в 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
, которые временно преобразуются из примитивных типов.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.