Todas las características de ES2020 con ejemplos

ES2020 es una continuación de la mejora de JavaScript de ES (ECMAscript). En el año 2020, los cambios importantes de ES son los siguientes:

1. Entero grande

BigInt es una nueva primitiva numérica en JavaScript. En el tipo BigInt puede almacenar números enteros que son de precisión arbitraria. BigInt puede almacenar números mayores que max_safe_integer (2 53 -1). Antes de esta característica, un programador necesita usar algunas bibliotecas de terceros, lo que lleva a más tiempo de carga, más tiempo de compilación, más tiempo de análisis. 

Nombre de archivo: index.js

Javascript

let max = Number.MAX_SAFE_INTEGER;
  
console.log(max);
//  9007199254740991
  
console.log(++max);
//  9007199254740992
  
console.log(++max);
//  9007199254740992
  
console.log(++max);
//  9007199254740992
  
let big = 9007199254740991n;
  
console.log(big)
//  9007199254740991n
  
console.log(++big);
//  9007199254740992n
  
console.log(++big);
//  9007199254740993n
  
console.log(++big);
//  9007199254740994n 
  
console.log(typeof big);
//  bigint

Producción:

9007199254740991
9007199254740992 
9007199254740992 
9007199254740992 
9007199254740991n
9007199254740992n
9007199254740993n
9007199254740994n
bigint

Nota: Para crear un BigInt, debe agregar ‘n’ al final de cualquier número entero y se convertirá en un BigInt. No importa si el número entero es menor o mayor que MAX_SAFE_INTEGER.

2. String.prototipo.matchAll

Esta función está diseñada para facilitar las coincidencias de expresiones regulares (o la búsqueda simple sin expresiones regulares) cuando tenemos que lidiar con más de una coincidencia dentro de una string. El método matchAll toma un argumento que es una expresión regular o el valor que queremos buscar dentro de la String.

Nombre de archivo: index.js

Javascript

let gfg = "Geeks for Geeks";
  
for(iter of gfg.matchAll('e')) {
  console.log(iter[0])
}
  
// Using regex
const string = 'Magic hex numbers: DEADBEEF CAFE';
const regex = /\b\p{ASCII_Hex_Digit}+\b/gu;
  
for (const match of string.matchAll(regex)) {
  console.log(match[0]);
}

Producción: 

e
e
e
e
DEADBEEF
CAFE

3. Importación dinámica

ECMA2015 anterior ya implementó la funcionalidad de importación. Antes de la importación dinámica, solo importamos una secuencia de comandos en la parte superior del código, pero al usar la importación dinámica, podemos importar una secuencia de comandos en cualquier lugar y de acuerdo con sus condicionales (por ejemplo, puede usar if/else para asegurarse de que la secuencia de comandos debe cargarse o no). ). 

Javascript

<script>
  /* Some sample code....
     Now ask user for array and if user says 
     yes the call it from another file */
  
  let userDecision = confirm(
    "Do you want an array and print it");
  
  if (userDecision == true) {
      let arr =  import("./gfg.js").then((res) => {
  
          //  [1, 2, 3, 4, 5, 6]
          console.log(res.default)
     }).catch((er) => {
          console.log(er)
      })
  } else {
      cnosole.log("Nothing to do")
  }
</script>

Nombre de archivo: gfg.js

Javascript

const x = () => {
    return [1,2, 3, 4, 5, 6]
}
  
export default x()

4. Global esto

Esta es una característica increíble. Hay muchos entornos de JavaScript como el entorno del Node, el entorno del navegador, el entorno del trabajador del servicio y todos estos entornos tienen su propio global, por ejemplo, en el navegador, el global es la ventana, para el entorno del Node es Global y para el trabajador del servicio es Self. . 

Nombre de archivo: index.js

Javascript

let findGlobal = () => {
  if (typeof self !== 'undefined') {
      return self
  };
  if (typeof window !== 'undefined') {
      return window
  };
  if (typeof global !== 'undefined') {
      return global;
   }
};
  
// Function call
console.log(findGlobal());

Producción: 

Object [global] {
  global: [Circular],
  clearInterval: [Function: clearInterval],
  ....
  ....
  ....
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Function]
  }
}

Este método es largo y no tan preciso, por eso ECMA introdujo la palabra clave globalThis y ahora podemos encontrar el valor global this en una sola línea, como se muestra a continuación:

Nombre de archivo: index.js

Javascript

console.log(globalThis);

Producción: 

Object [global] {
  global: [Circular],
  clearInterval: [Function: clearInterval],
  ....
  ....
  ....
  setImmediate: [Function: setImmediate] {
    [Symbol(nodejs.util.promisify.custom)]: [Function]
  }
}

5. Promise.allSettled( )

A veces, en las promesas de JavaScript, solo queremos el resultado de todas las promesas, ya sea que se resuelva o no. No necesitamos el resultado de la promesa, ya sea que se resuelva o se rechace, pero la promesa no debe estar en estado pendiente. Para lograr esto, tenemos la función allSettled() en ECMA2020.

Javascript

<script>
   const myProms = [
       Promise.resolve("Hello"),
       Promise.resolve(1234),
       Promise.resolve("Some other Promise")
   ]
  
  Promise.allSettled(myProms).then((res) => {
    console.log(res)
  }).catch(
    (err) => {
    console.log(err)
  })
</script>

Producción: 

6. Enstringmiento opcional

Esta es una característica muy útil que introdujo la ECMA. Usando el enstringmiento opcional, puede profundizar más y más sin conocer el nombre de la propiedad de un objeto anidado. Supongamos que tenemos un objeto anidado, y queremos profundizar, y no estamos seguros de cuál es el nombre de los nombres de propiedad en muchos pasos, entonces podemos usar el operador de enstringmiento opcional ( ?. ) Si solo usamos el punto ( . ) para acceder a los nombres de propiedad y accidentalmente ingresamos un nombre de propiedad incorrecto, obtendremos un error, pero al usar el operador de enstringmiento opcional ( ?. ) Obtendremos indefinido en lugar del mensaje  de error .

Nombre de archivo: index.js

Javascript

let gfg = {
    user : {
        firstUser : {
            name: {
                firstName: "Geeks",
                lastName : "forGeeks"
            }
        }
    }
}
  
console.log(gfg.user.firstUser.name.firstName)
// Geeks
  
console.log(gfg.user.ANY_RANNDOM_STRING?.name.firstName)
// undefined
  
console.log(gfg.user.ANY_RANNDOM_STRING.name.firstName)
// Uncaught TypeError: Cannot read property 
// 'name' of undefined

Producción:

Geeks
undefined
Uncaught TypeError: Cannot read property 'name' of undefined....

Publicación traducida automáticamente

Artículo escrito por _saurabh_jaiswal 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 *