Herramientas de usuario

Herramientas del sitio


informatica:programacion:cursos:programacion_avanzada_javascript:simbolos

¡Esta es una revisión vieja del documento!


Símbolos

Módulo perteneciente al curso Programación avanzada con JavaScript y ECMAScript.

Introducción

Los símbolos son un elemento nuevo en ECMAScript que ofrece la posibilidad de crear valores únicos. Los símbolos son objetos de un tipo básico nuevo llamado symbol. Esos objetos son inmutables (el valor asociado a un símbolo no puede cambiarse después de su creación) y únicos (no hay dos símbolos con el mismo valor).

Creación de símbolos

Los símbolos se crean usando la función Symbol:

var s1 = Symbol("foo");

A la función Symbol se le pasa una cadena (no se admite llamar a Symbol sin parámetros) que sirve como identificador del símbolo. Pero aunque le pasemos la misma cadena a dos símbolos, cada uno de ellos es distinto para ECMAScript. Por ejemplo, el siguiente código crea dos símbolos distintos:

var s1 = Symbol("foo");
var s2 = Symbol("foo");
s1 === s2;   // false
s1 == s2;    // false

Tampoco hay conversión alguna entre el símbolo y la cadena que se haya usado para crearlo:

var s1 = Symbol("foo");
s1 === "foo";   // false
s1 == "foo";    // false

A partir de la cadena que se haya usado como identificación del símbolo (foo en nuestros ejemplos) no hay manera de poder obtener el símbolo asociado a ella.

Fíjate en que la función Symbol no es una función constructora. Usar new Symbol genera un error.

Los símbolos son un tipo nuevo, es decir usar typeof sobre una variable de tipo símbolo no devolverá “object”, sino que devolverá “symbol”.

Los símbolos en general no se convierten de forma automática a ningún tipo, e intentar concatenar un símbolo con una cadena da error:

var s1 = Symbol("foo");
var str = s1 + "bar";       // TypeError

Un símbolo básicamente solo es igual a sí mismo o bien a un objeto creado con Object(s) siendo s el propio símbolo:

var s1 = Symbol("foo");
var obj = Object(s1);
typeof(s1);     // "symbol"
typeof(obj);    // "object"
s1 == obj;      // true
s1 === obj;     // false

Para convertir un símbolo en una cadena puede usarse String(s) (siendo s el símbolo), pero esto no devuelve la cadena que se haya usado como identificador, sino que devuelve una representación en formato cadena del símbolo:

var s1 = Symbol("foo");
var str = String(s1);  //"Symbol(foo)"
str == s1;      // false
str === s1;     // false
str == "foo";   // false
str === "foo";  // false

Variables privadas

DEMO: Revealing Module Pattern

Variables privadas usando símbolos

DEMO: Símbolos como nombres de propiedades

DEMO: Símbolos en valores

DEMO: Símbolos en nombres de métodos

Símbolos globales

informatica/programacion/cursos/programacion_avanzada_javascript/simbolos.1729076710.txt.gz · Última modificación: por tempwin