Motivación para traer símbolos en ES6

Javascript constaba de seis tipos de datos undefined , null , boolean , String , Number y Object (incluye el tipo de datos de array). el símboloes un tipo de datos recientemente introducido en ES6, también conocido como JavaScript 6, lo que hace que el número total de tipos de datos en JavaScript sea 7. Es un tipo de datos primitivo, lo que significa que no se puede crear una instancia de Symbol. Los símbolos son tipos de datos inmutables y actúan como identificadores únicos para claves de objetos. Antes de la introducción de Symbol, era muy difícil generar claves de objeto únicas. Era importante mantener claves de objeto únicas para evitar la sobrescritura de valores que tienen una clave de objeto similar, ya que esto podría provocar la pérdida de datos. La introducción de Symbol ayudó a superar este problema, ya que se podían generar claves únicas sin escribir un código complicado. Las claves de objeto únicas se pueden generar usando la función Symbol() . La función Símbolo()devuelve un valor de tipo símbolo. A continuación se presentan ejemplos que demuestran el propósito de los símbolos.

Sintaxis:

let symbol = Symbol();

Ejemplo 1: En este ejemplo, vamos a generar símbolos.

  • Código:

    <script>
      
        // Write Javascript code here
        let sym1 = Symbol()
        let sym2 = Symbol('mysymbol')
        console.log('Type of sym1: ', typeof(sym1))
        console.log('Type of sym2: ', typeof(sym2))
    </script>
  • Producción:
    Type of sym1:  symbol
    Type of sym2:  symbol

Ejemplo 2: En este ejemplo, veremos que la función Symbol() genera claves de objeto únicas.

  • Código:

    <script>
      
        // Write Javascript code here
        let sym1 = Symbol('mysymbol')
        let sym2 = Symbol('mysymbol')
        console.log('sym1===sym2: ', sym1===sym2)
    </script>
  • Producción:
    sym1===sym2: false

Nota: el tipo de datos del símbolo es un tipo de datos primitivo y no se puede instanciar

Comparación de símbolo y sin símbolo: Consideremos un ejemplo en el que se necesita mantener una lista de calificaciones obtenidas por los estudiantes en un examen en particular. Los estudiantes aún no han sido asignados a sus números de lista. En esta situación, el nombre de un alumno se utilizará como clave de objeto. Sin embargo, puede haber más de un estudiante con nombres similares. Esto puede ocasionar que se sobrescriban las calificaciones obtenidas por cada estudiante, lo que resulta en la pérdida de datos. Para superar este problema, se puede utilizar el tipo de datos de símbolo.

  • Código 1: el fragmento de código a continuación muestra el escenario cuando no se usa el símbolo.

    <script>
      
    // Write Javascript code here
    var marks = {}
    marks["Joe"] = 100
    marks["Ana"] = 90
    marks["Chloe"] = 95
    marks["Marie"] = 75
    console.log(marks)
    console.log('Another student with'
              + ' name Chloe appears')
    marks['Chloe'] = 60
    console.log('After the marks of the'
         + ' fifth student is entered')
    console.log(marks)
    </script>
  • Salida: Las marcas de Chloe se sobrescriben cuando aparece otro estudiante con el mismo nombre.
  • Código 2: el fragmento de código a continuación muestra el escenario cuando se usa el símbolo

    <script>
      
    // Write Javascript code here
    var marks={}
    var sym1=Symbol("Joe")
    marks[sym1]=100
    var sym2=Symbol("Ana")
    marks[sym2]=90
    var sym3=Symbol("Chloe")
    marks[sym3]=95
    var sym4=Symbol("Marie")
    marks[sym4]=75
    console.log(marks)
    console.log('Another student '
        + 'with name Chloe appears')
    var sym5=Symbol("Chloe")
    marks[sym5]=60
    console.log('After the marks of '
        + 'the fifth student is entered')
    console.log(marks)
    </script>
  • Salida: Las notas de Chloe no se sobrescriben cuando aparece otro estudiante con el mismo nombre, no se pierden datos. Tienes que ejecutar esto localmente.

Limitaciones del símbolo:

  • Los símbolos se ignoran en el bucle for..in.
  • Ignorado por funciones como Object.keys() , Object.getOwnPropertyNames() y JSON.stringify() y, por lo tanto, no se puede serializar.
  • El símbolo se utilizó principalmente para garantizar la privacidad. Pero métodos como Object.getOwnPropertySymbols() devuelve una array de cualquier clave basada en símbolos y Reflect.ownKeys() devuelve una array de todas las claves, incluidos los símbolos.

Publicación traducida automáticamente

Artículo escrito por Shreyasi_Chakraborty y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *