La versión ECMAScript 2015 de JavaScript agregó un nuevo tipo de datos primitivo llamado symbol
, que es un tipo primitivo como type number
y type string
. Consulte la documentación Symbol para obtener un desglose de estos símbolos. Los valores de tipo symbol
se crean llamando al constructor Symbol()
:
Tabla de contenidos
let sym1 = Symbol(); let sym2 = Symbol("key"); // clave de texto opcional
Los simbolos son únicos e inmutables:
let sym2 = Symbol("key"); let sym3 = Symbol("key"); sym2 === sym3; // false, los símbolos son únicos incluso si se crean con la misma clave
Los símbolos se pueden usar como claves de propiedad para objetos y cadenas:
let sym = Symbol(); let obj = { [sym]: "value" }; console.log(obj[sym]); // "value"
Los símbolos también se pueden combinar con declaraciones de propiedades calculadas para declarar propiedades de objetos y elementos de clases:
const getClassNameSymbol = Symbol(); class C { [getClassNameSymbol](){ return "C"; } } let c = new C(); let className = c[getClassNameSymbol](); // "C"
Símbolos conocidos
Además de los códigos definidos por el programador, también existen códigos especiales predefinidos llamados códigos conocidos(Well-known Symbols). Estos símbolos en línea se utilizan para representar cómo funcionan internamente algunas partes del lenguaje. Aquí hay una lista de códigos conocidos (consulte la documentación del código para obtener más información):
Symbol.hasInstance
Una función que determina si el constructor reconoce un objeto como un objeto del que se deriva. Se utiliza desde el parámetro instanceof. El comportamiento del parámetro instanceof se puede personalizar con este código.
Symbol.isConcatSpreadable
Un valor booleano que especifica si un objeto debe «aplanarse» en elementos de matriz. Utiliza este código de la función Array.prototype.concat()
.
Symbol.iterator
Una función que devuelve el iterador predeterminado de un objeto determinado, que se utiliza desde un bucle for...of
.
Symbol.match
Una función que coincide con una cadena y también se usa para determinar si el objeto se puede usar como una expresión regular. Se utiliza desde la función String.prototype.match()
.
Symbol.replace
Este conocido símbolo especifica la función que reemplazará parte de un string. Esta función será llamada desde la función String.prototype.replace()
.
Symbol.search
Este conocido símbolo especifica la función que devolverá un índice dentro de un string de texto que coincida con la expresión regular. Esta función será llamada desde la función String.prototype.search()
.
Symbol.species
Una función utilizada para crear objetos derivados.
Symbol.split
Este conocido símbolo especifica la función que dividirá una cadena de texto en índices que coincidan con una expresión regular. Esta función será llamada desde la función String.prototype.split()
.
Symbol.toPrimitive
Una función utilizada para convertir un objeto a un valor inicial apropiado. Llamado desde el proceso abstracto ToPrimitive
.
Symbol.toStringTag
Una cadena utilizada en la descripción predeterminada del objeto, y este código se utiliza desde el Object.prototype.toString()
.
Symbol.unscopables
Un objeto Object
cuyos nombres de propiedad son nombres de propiedad que están excluidos del entorno with
de asociaciones de objetos relacionados.
Recursos del Artículo
- Múltiples Constantes en TypeScript
- Iteradores y generadores en TypeScript
- Símbolo en TypeScript (Symbol)
- Tipos Avanzados en TypeScript
- Tipos de Compatibilidad en TypeScript
- Inferir Tipos en TypeScript
- Tipos Generalizados (Generics) en TypeScript
- Tipos Básicos de Datos en TypeScript
- Interfaces en TypeScript
- Declaración de Variables en TypeScript
- Funciones en TypeScript
- Categorías en TypeScript
- Introducción a TypeScript