Objetos Wrapper en JavaScript
Este artículo explica sobre los objetos envoltorios en JavaScript.
YouTube Video
Objetos Envoltorios
JavaScript tiene tipos primitivos y objetos para manejarlos (objetos envolventes).
Tipos Primitivos
Los tipos primitivos representan un valor único y son simples y ligeros. Estos son inmutables (inmutables) y no tienen directamente métodos o propiedades de objeto, pero pueden convertirse temporalmente en objetos contenedores para realizar operaciones.
string y number son ejemplos de tipos primitivos. Por otro lado, los objetos envolventes comienzan con una letra mayúscula, como String y Number.
Objetos Envoltorios
Para manipular tipos primitivos, JavaScript genera temporalmente objetos contenedores (Object). Los objetos contenedores contienen métodos y propiedades para los 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
Numberes un tipo de objeto que envuelve unnumberprimitivo. Al crear explícitamente un objetoNumber, puedes manejar números como unnumber, pero generalmente se recomienda usar el tiponumberprimitivo.
typeof numObjectes"object", perotypeof 42es"number".
- Ten en cuenta que usar el operador
newpara generar un nuevo objeto contenedor produce un resultado diferente al llamar aNumbercomo una función. Cuando se llama como función, se devuelve unnumberprimitivo.
String
1let strObject = new String("Hello"); // Wrapper object
2
3console.log(typeof strObject); // object
4console.log(strObject.valueOf()); // Hello
- Es un tipo de objeto que envuelve un
stringprimitivo. Usando un objetoString, puedes acceder a las propiedades y métodos de las cadenas, pero generalmente se usa unstringprimitivo.
typeof strObjectes"object", perotypeof "Hello"es"string".
- Al igual que
Number, llamar aStringcomo una función devuelve unstringprimitivo.
Boolean
1let boolObject = new Boolean(true); // Wrapper object
2
3console.log(typeof boolObject); // object
4console.log(boolObject.valueOf()); // true
- Es un tipo de objeto que envuelve un
booleanprimitivo. También puedes crear explícitamente un objetoBoolean, pero generalmente se usa un tipobooleanprimitivo.
typeof boolObjectes"object", perotypeof truees"boolean".
- Similar a
Number, llamar aBooleancomo una función devuelve unbooleanprimitivo.
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()); //
- Puedes usar
Objectpara crear un objeto envoltorio paraSymbol, pero generalmente utilizas el tipo primitivoSymboldirectamente.
Diferencias entre Tipos Primitivos y Objetos Envoltorios
- Los tipos primitivos son ligeros y eficientes en memoria, pero no tienen propiedades ni métodos directos. Sin embargo, en JavaScript, incluso con tipos primitivos, se crean automáticamente objetos contenedores temporales cuando es necesario para proporcionar métodos y propiedades.
1let text = "Hello";
2
3// A temporary String object is created,
4// allowing access to the length property
5console.log(text.length);- Los objetos contenedores son objetos generados explícitamente que pueden afectar la memoria y el rendimiento, por lo que generalmente se recomienda usar tipos primitivos.
Conclusión
- Tipos primitivos: Tipos ligeros como
number,string,boolean,null,undefinedysymbolque no tienen métodos directos. - Objetos envolventes: Objetos como
Number,StringyBooleanque se convierten temporalmente de tipos primitivos.
Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.