Objetos Envolventes em JavaScript
Este artigo explica sobre objetos envolventes em JavaScript.
YouTube Video
Objetos Wrapper
O JavaScript possui tipos primitivos e objetos para manipulá-los (objetos wrapper).
Tipos Primitivos
Tipos primitivos representam um único valor e são simples e leves. Esses são imutáveis (invariáveis) e não possuem diretamente métodos ou propriedades de objeto, mas podem ser temporariamente convertidos em objetos wrapper para operações.
string
e number
são exemplos de tipos primitivos. Por outro lado, objetos wrapper começam com uma letra maiúscula, como String
e Number
.
Objetos Envolventes
Para manipular tipos primitivos, o JavaScript gera temporariamente objetos wrapper (Object
wrappers). Objetos wrapper contêm métodos e propriedades para os tipos primitivos.
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
é um tipo de objeto que encapsula umnumber
primitivo. Ao criar explicitamente um objetoNumber
, você pode manipular números como umnumber
, mas geralmente é recomendado usar o tipo primitivonumber
.
typeof numObject
é"object"
, mastypeof 42
é"number"
.
- Esteja ciente de que usar o operador
new
para gerar um novo objeto wrapper produz um resultado diferente de chamarNumber
como uma função. Quando chamado como uma função, é retornado umnumber
primitivo.
String
1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject); // object
4console.log(strObject.valueOf()); // Hello
- É um tipo de objeto que encapsula uma
string
primitiva. Ao usar um objetoString
, você pode acessar propriedades e métodos de string, mas geralmente é utilizada umastring
primitiva.
typeof strObject
é"object"
, mastypeof "Hello"
é"string"
.
- Assim como
Number
, chamarString
como uma função retorna umastring
primitiva.
Boolean
1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject); // object
4console.log(boolObject.valueOf()); // true
- É um tipo de objeto que encapsula um
boolean
primitivo. Você também pode criar explicitamente um objetoBoolean
, mas geralmente é utilizado o tipo primitivoboolean
.
typeof boolObject
é"object"
, mastypeof true
é"boolean"
.
- Semelhante a
Number
, chamarBoolean
como uma função retorna umboolean
primitivo.
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()); //
- Você pode usar
Object
para criar um objeto wrapper paraSymbol
, mas geralmente, você usa o tipo primitivoSymbol
diretamente.
Diferenças entre Tipos Primitivos e Objetos Wrapper
- Tipos primitivos são leves e eficientes em termos de memória, mas não possuem propriedades ou métodos diretos. No entanto, no JavaScript, mesmo com tipos primitivos, objetos wrapper temporários são criados automaticamente quando necessário para fornecer métodos e propriedades.
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);
- Objetos wrapper são objetos gerados explicitamente que podem impactar a memória e o desempenho, por isso é geralmente recomendado usar tipos primitivos.
Conclusão
- Tipos Primitivos: Tipos leves como
number
,string
,boolean
,null
,undefined
esymbol
que não possuem métodos diretos. - Objetos Envoltórios: Objetos como
Number
,String
eBoolean
que são temporariamente convertidos a partir de tipos primitivos.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.