Como niño al que le gusta escribir código a mano, creo que debería escribirlo yo mismo para memorizarlo mejor, por eso hoy presentaré las características de ES6 ~ ES12. Si tiene puntos ciegos en el uso de ES o no sabe mucho sobre las nuevas funciones , creo que este artículo debería poder ayudarlo muy bien ~
Para comprenderlo mejor, lo explicaremos en el modo de caso , por lo que Para tener una mejor comprensión y, al mismo tiempo, el caso también admite la depuración en modo desarrollador, espero que puedan admitirlo ~
ECMAScript es un lenguaje de programación de scripts estandarizado por Ecma International (anteriormente la Asociación Europea de Fabricantes de Computadoras) a través de ECMA -262. También se puede decir que solo existen dos versiones de JavaScript como estándar
en el mundo de los programadores: ES5
y ES6
. Se dice que ES6 se lanzó en 2015, que también es el momento en que se oficializó la gran era del front-end. Es decir, 2015 se utiliza como límite, antes de 2015 se llamaba ES5
y después de 2016 se llama colectivamente ES6
Para obtener información sobre las características ES6
, puede leer "Introducción a los estándares de ES6". Profesor Ruan Yifeng.
La diferencia entre let, const y var:
Además, cuando se declara un objeto con const
, las propiedades del objeto se pueden cambiar, porque: obj declarado por const solo guarda la dirección de referencia de su. Objeto Mientras la dirección permanezca sin cambios, no habrá errores
...
para representar todos los restantesundefined
. a, b, c] = [1, 2, 3] consola.log(a, b, c) // 1 2 3 sea [a, , c] = [1, 2, 3] consola.log(a, , c) // 1 3 sea [a, b, ...c] = [1, 2, 3, 4, 5] consola.log(a, b, c) // 1 2 [3, 4, 5] sea [a, b, ...c] = [1] console.log(a, b, c) // 1 indefinido [] sea [a = 1, b = a] = [] const.log(a, b) // 1 1 sea [a = 1, b = a] = [2] const.log(a, b) // 2 2
undefined
:
, otros Equivalente al aliaslet { a, b } = { a: 1, b: 2 }; consola.log(a, b); // 1 2 sea {a} = {b:2}; consola.log(a); // indefinido sea { a, b = 2 } = { a: 1 }; consola.log(a, b); // 1 2 sea { a: b = 2 } = { a: 1 }; console.log(a); // La variable a no existe console.log(b); // 1
length
. , que representa el númerolet [a, b, c, d, e] = "hola" console.log(a, b, c, d, e) // hola let {longitud} = "hola" console.log(length) // 5
let { toString: s } = 123; console.log(s === Number.prototype.toString) // verdadero let { toString: s } = verdadero; console.log(s === Boolean.prototype.toString) // verdadera
let arr = [[1,2], [3, 4]] sea res = arr.map([a, b] => a + b) consola.log(res) // [3, 7] let arr = [1, indefinido, 2] let res = arr.map((a = 'prueba') => a); console.log(res) // [1, 'prueba', 2] let func = ({x, y} = {x: 0, y: 0}) => { retorno[x,y] } console.log(func(1, 2)) // [indefinido, indefinido] consola.log(func()) // [0, 0] console.log(func({})) // [indefinido, indefinido] console.log(func({x: 1})) // [1, indefinido] let func = ({x=0, y=0}) => { retorno[x,y] } console.log(func({x:1,y:2})) // [1, 2] console.log(func()) // error console.log(func({})) // [0, 0] console.log(func({x: 1})) // [1, 0]La regularidad
es en realidad un punto de conocimiento muy difícil de entender. Si alguien puede dominarlo por completo, es realmente muy poderoso. aquí En primer lugar,
se divide en dos estilos: JS分格
y perl 分格
JS: RegExp()
let re = new RegExp('a'); let re = new RegExp('a', 'i'); //El primero es el objeto de búsqueda, el segundo es la opción
estilo perl: / regla/opción, y puede ir seguido de múltiples, independientemente del orden
let re = /a/; //Buscar si hay un en una cadena let re = /a/i;// El primero es el objeto a buscar, el segundo es la opción
Aquí presentamos una prueba en línea de expresión regular (con expresiones regulares comunes):
大括号包含
los caracteres Unicode//Unicode console.log("a", "u0061"); // aa console.log("d", "u{4E25}"); // d estrictamente let str = 'Domesy' //codePointAt() console.log(str.codePointAt(0)) // 68 //String.fromCharCode() console.log(String.fromCharCode(68)) // D //String.raw() console.log(String.raw`Holan${1 + 2}` // Holan3); console.log(`Holan${1 + 2}` // Hola 3); let str = 'doméstico' //comienza con() console.log(str.startsWith("D")) // verdadero console.log(str.startsWith("s")) // falso //termina con() console.log(str.endsWith("y")) // verdadero console.log(str.endsWith("s")) // falso //repeat(): el parámetro pasado se redondeará automáticamente hacia arriba. Si es una cadena, se convertirá en un número console.log(str.repeat(2)) // DomesyDomesy. console.log(str.repeat(2.9)) // DomesyDomesy // recorrido: para-de para (dejemos el código de str) { console.log(code) // Devuelve D omesy una vez } //incluye() console.log(str.includes("s")) // verdadero console.log(str.includes("a")) // falso // recortarInicio() const cadena = " ¡Hola mundo! "; console.log(string.trimStart()); // "¡Hola mundo!" console.log(string.trimLeft()); // "¡Hola mundo! " // recortarEnd() const cadena = " ¡Hola mundo! "; console.log(string.trimEnd()); // "¡Hola mundo!" console.log(string.trimRight()); // "¡Hola mundo!"
let str = `Dome si` console.log(str) //Ajustará las líneas automáticamente//Dome //
const str = { nombre: 'Pequeño Dudu', información: 'Hola a todos' } console.log(`${str.info}, soy `${str.name}`) // Hola a todos, soy Xiao Dudu
un
1, 2, 3, 4, 5] //matriz.de() let arr1 = Array.of(1, 2, 3); consola.log(arr1) // [1, 2, 3] //copyWithin(): tres parámetros (destino, inicio = 0, fin = this.length) // objetivo: la posición del objetivo // inicio: la posición inicial, que se puede omitir y puede ser un número negativo. // final: posición final, se puede omitir, puede ser un número negativo, la posición real es final-1. console.log(arr.copyWithin(0, 3, 5)) // [4, 5, 3, 4, 5] //encontrar() console.log(arr.find((elemento) => elemento > 3 )) // 4 //buscaríndice() console.log(arr.findIndex((elemento) => elemento > 3 )) // 3 //llaves() for (let index of arr.keys()) { console.log(index); // Devuelve 0 1 2 3 4 a la vez } // valores() for (let index of arr.values()) { console.log(index); // Devuelve 1 2 3 4 5 a la vez } // entradas() for (let index of arr.entries()) { console.log(index); // Devuelve [0, 1] [1, 2] [2, 3] [3, 4] [4, 5] una vez } sea arr = [1, 2, 3, 4, 5] // Array.from(): el recorrido puede ser una pseudomatriz, como cadena, estructura de conjunto, nodo nodo let arr1 = Array.from([1, 3, 5], (item) => { artículo devuelto * 2; }) consola.log(arr1) // [2, 6, 10] // fill(): tres parámetros (objetivo, inicio = 0, final = this.length) // objetivo: la posición del objetivo // inicio: la posición inicial, que se puede omitir y puede ser un número negativo. // final: posición final, se puede omitir, puede ser un número negativo, la posición real es final-1. console.log(arr.fill(7)) // [7, 7, 7, 7, 7] console.log(arr.fill(7, 1, 3)) // [1, 7, 7, 4, 5] sea arr = [1, 2, 3, 4] //incluye() console.log(arr.includes(3)) // verdadero console.log([1, 2, NaN].includes(NaN)); // verdadero
// Su función es expandir la matriz let arr = [3, 4, 5] consola.log(...arr) // 3 4 5 sea arr1 = [1, 2, ...arr] console.log(...arr1) // 1 2 3 4 5
for-in
//Object.is() console.log(Object.is('abc', 'abc')) // verdadero console.log(Object.is([], [])) // falso //Recorrido: for-in let obj = { nombre: 'Domesy', valor: 'Reaccionar' } para (dejar ingresar obj) { console.log(key); // Devuelve el valor del nombre del atributo a su vez console.log(obj[key]); // Devuelve los valores de los atributos en secuencia Domesy React } //Objeto.claves() console.log(Object.keys(obj)) // ['nombre', 'valor'] //Objeto.asignar() objetivo constante = {a: 1, b: 2}; fuente constante = {b: 4, c: 5}; resultado constante = Object.assign(destino, fuente) console.log(resultado) // {a: 1, b: 4, c: 5} console.log(target) // {a: 1, b: 4, c: 5}
let a = 1; sea b = 2; sea obj = {a, b} console.log(obj) // { a: 1, b: 2 } método let = { Hola() { console.log('hola') } } console.log(method.hello()) //
let a = "b" dejar objeto = { [a]: "c" }console.log(obj) //
{b: "c"}...
// Su función es expandir la matriz let { a , b , ...c } = { a: 1, b: 2, c: 3, d: 4}; consola.log(c) // {c: 3, d: 4} sea obj1 = {c: 3} sea obj = { a: 1, b: 2, ...obj1} console.log(obj) // { a: 1, b: 2, c: 3}Binario
0b
o 0B
, indica binario00
o 0O
, indica binario正数为1
,负数为-1
,正零0
,负零-0
, NaN
parseInt
parseFloat
//Binary console.log(0b101) // 5 consola.log(0o151) //105 //Número.esFinito() console.log(Number.isFinite(7)); // verdadero console.log(Number.isFinite(true)); // falso //Número.isNaN() console.log(Number.isNaN(NaN)); // verdadero console.log(Number.isNaN("verdadero" / 0)); // verdadero console.log(Number.isNaN(verdadero)); // falso //Número.esInteger() console.log(Number.isInteger(17)); // verdadero console.log(Number.isInteger(17.58)); // falso //Número.isSafeInteger() console.log(Number.isSafeInteger(3)); // verdadero console.log(Number.isSafeInteger(3.0)); // verdadero console.log(Number.isSafeInteger("3")); // falso console.log(Number.isSafeInteger(3.1)); // falso //Matemáticas.trunc() console.log(Math.trunc(13.71)); // 13 console.log(Math.trunc(0)); // 0 console.log(Math.trunc(verdadero)); // 1 console.log(Math.trunc(falso)); // 0 //Matemáticas.signo() console.log(Math.sign(3)); // 1 console.log(Math.sign(-3)); // -1 console.log(Math.sign(0)); // 0 console.log(Math.sign(-0)); // -0 console.log(Math.sign(NaN)); // NaN console.log(Math.sign(verdadero)); // 1 console.log(Math.sign(falso)); // 0 //Matemáticas.abrt() consola.log(Math.cbrt(8)); // 2 //Número.parseInt() console.log(Number.parseInt("6.71")); // 6 console.log(parseInt("6.71")); // 6 //Número.parseFloat() console.log(Number.parseFloat("6.71@")); // 6.71 console.log(parseFloat("6.71@")); // 6.71
// Al parámetro se le asigna un valor específico de forma predeterminada. función divertida(x, y = x){ consola.log(x, y) } función fun1(c, y = x){ consola.log(c,x,y) } diversión(2); //2 2 fun1(1); //1 1 1
function fun(...arg){ consola.log(arg) // [1, 2, 3, 4] }
fun(1, 2, 3, 4)
let flecha = (v) => v + 2 console.log(arrow(1)) // 3
La diferencia entre las funciones de flecha y las funciones ordinarias
Set es una nueva estructura de datos en ES6, que es similar a una matriz. pero el valor del miembro es único y no hay
declaraciones de valores repetidos: const set = new Set()
Atributos:
Método:
específicamente Nota:
iterator
en el orden de inserción,let list = new Set() //agregar() lista.add("1") lista.añadir(1) consola(lista) // Establecer(2) {1, "1"} //tamaño consola(lista.tamaño) // 2 //borrar() lista.eliminar("1") consola(lista) // Establecer(1) {1} //tiene() lista.has(1) // verdadero lista.has(3) // falso //claro() lista.clear() consola(lista) // Establecer(0) {} let arr = [{id: 1}, {id: 2}, {id: 3}] lista de let = nuevo conjunto (arr) //llaves() for (let clave de list.keys()) { console.log(clave); // Imprime esto: {id: 1} {id: 2} {id: 3} } //valores() for (let clave de list.values()) { console.log(clave); // Imprime esto: {id: 1} {id: 2} {id: 3} } //entradas() for (dejar datos de list.entries()) { console.log(data); // Imprime esto: [{id: 1},{id: 1}] [{id: 2},{id: 2}] [{id: 3},{id: 3 } ] } //para cada uno lista.forEach((elemento) => { console.log(item)//Imprime esto: {id: 1} {id: 2} {id: 3} });
Aplicación:
deduplicaciónde
new Set
no puede eliminar objetos.indefinido, nulo, nulo, NaN, NaN, 'NaN', 0, 0, 'a', 'a']; console.log([...nuevo conjunto(arr)]) //o console.log(Array.from(nuevo conjunto(arr))) // [1, 'verdadero', verdadero, 15, falso, undefinido, nulo, NaN, 'NaN', 0, 'a']
let a = new Set([1, 2, 3]) sea b = nuevo conjunto ([2, 3, 4]) //Union console.log(new Set([...a, ...b])) // Set(4) {1, 2, 3, 4} //Intersección console.log(new Set([...a].filter(v => b.has(v)))) // Set(2) {2, 3} // Conjunto de diferencias new Set([...a].filter(v => !b.has(v))) // Set(1) {1}
let set = new Set([1,2, 3]) console.log(new Set([...set].map(v => v * 2))) // Set(3) {2, 4, 6}Definición
: la misma estructura que Set, pero el miembro los valores solo se pueden
declarar para el objeto: const set = new WeakSet()
Método WeakSet():
Nota:
Índice de recomendación
Map es una nueva estructura de datos en ES6, que es un objeto similar. La clave es una declaración de valor de cualquier tipo
: const map = new Map()
atributos:
Método:
Nota especial:
let map = new Map() //colocar() mapa.set('a', 1) mapa.set('b', 2) console.log(mapa) // Mapa(2) {'a' => 1, 'b' => 2} //conseguir mapa.get("a") // 1 //tamaño console.log(mapa.tamaño) // 2 //borrar() map.delete("a") // verdadero console.log(mapa) // Mapa(1) {'b' => 2} //tiene() map.has('b') // verdadero mapa.has(1) // falso //claro() mapa.clear() console.log(mapa) // Mapa(0) {} let arr = [["a", 1], ["b", 2], ["c", 3]] let map = nuevo mapa (arr) //llaves() for (let clave de map.keys()) { console.log(clave); // Imprime esto: abc } //valores() for (dejemos el valor de map.values()) { console.log(valor); // Imprime esto: 1 2 3 } //entradas() for (dejar datos de map.entries()) { console.log(datos); // Imprime esto: ["a", 1] ["b", 2] ["c", 3] } //para cada uno mapa.forEach((elemento) => { console.log(item)//Imprime esto: 1 2 3 });definición
: y estructura del mapa, pero los valores de los miembros solo se pueden
declarar para objetos: const set = new WeakMap()
Método WeakMap():
El símbolo es un tipo de datos primitivo introducido en ES6, que representa独一无二
Declaración
: const sy = Stmbol()
Parámetros: cadena (opcional)
Método:
Symbol值
descrito por parámetros. este parámetro existe, devuelve el Symbol值
original (buscar primero y luego crear, registrado en el entorno global)Symbol值
registrado (solo se puede devolver key
de Symbol.for()
)Symbol值
utilizados como nombres de propiedades en el objeto// Declara let a = Symbol(); sea b = Símbolo(); consola.log(a === b); // falso //Símbolo.para() let c = Symbol.for("doméstico"); let d = Symbol.for("doméstico"); console.log(c === d); // verdadero //Símbolo.keyFor() const e = Símbolo.for("1"); console.log(Symbol.keyFor(e)); // 1 //Símbolo.descripción let símbolo = Símbolo("es"); console.log(símbolo.descripción); //es console.log(Símbolo("es") === Símbolo("es") // falso console.log(símbolo === símbolo); // verdadero console.log(symbol.description === "es"); // true
El proxy se utiliza para modificar el comportamiento predeterminado de ciertas operaciones, lo que equivale a realizar cambios a nivel de idioma, por lo que es una especie de "meta". programación"), es decir, la programación en un lenguaje de programación
se puede entender de esta manera. El proxy es una capa de拦截
establecida antes del objeto de destino. El mundo exterior debe pasar por esta capa de interceptación si quiere acceder a ella. Por lo tanto, Se proporciona un mecanismo para filtrar y reescribir el acceso desde el mundo exterior.
Proxy puede entenderse aquí como代理器
declaración de proxy: const proxy = new Proxy(target, handler)
el método de interceptación:
let obj = { nombre: 'doméstico', hora: '2022-01-27', valor: 1 } dejar datos = nuevo Proxy(obj, { //conseguir() get(objetivo, clave){ destino de retorno [clave]. reemplazar ("2022", '2015') }, //colocar() set(objetivo, clave, valor) { si (clave === "nombre") { retorno (destino[clave] = valor); } demás { destino de retorno [clave]; } }, // tiene() tiene (objetivo, clave) { si (clave === "nombre") { destino de retorno [clave]; } demás { devolver falso; } }, //eliminarPropiedad() eliminarProperty(destino, clave) { si (key.indexOf("_") > -1) { eliminar objetivo[clave]; devolver verdadero; } demás { destino de retorno [clave]; } }, // claves propias() propiasClaves(objetivo) { return Object.keys(destino).filter((item) => item!= "tiempo"); }, }) console.log(datos.hora) // 2015-01-27 datos.tiempo = '2020' datos.nombre = 'Reaccionar' console.log(data) //Proxy {nombre: 'React', hora: '2022-01-27', valor: 1} //Interceptar tiene() console.log("nombre" en datos) // verdadero console.log("tiempo" en datos) // falso // Eliminar eliminarPropiedad() eliminar datos.time; // verdadero // Atravesar ownKeys() console.log(Object.keys(datos)); //['nombre', 'valor'] //aplicar() let suma = (... argumentos) => { sea número = 0; args.forEach((elemento) => { número += elemento; }); devolver número; }; suma = nuevo Proxy(suma, { aplicar(objetivo, ctx, argumentos) { destino de retorno (... argumentos) * 2; }, }); consola.log(suma(1, 2)); // 6 console.log(suma.call(nulo, 1, 2, 3) // 12 console.log(sum.apply(null, [1, 2, 3])); // 12 //constructor() dejar Usuario = clase { constructor(nombre) { this.nombre = nombre; } } Usuario = nuevo Proxy(Usuario, { construir(objetivo, argumentos, nuevoObjetivo) { devolver nuevo objetivo(...args); }, }); console.log(new User("domesy")); // Usuario {name: 'domesy'}
Reflect es similar a Proxy, excepto que mantiene el comportamiento predeterminado de Object
y
los métodos de Reflect
.y Los métodos de Proxy corresponden uno a uno, por lo que no los presentaremos aquí
Clase: abstracción de una clase de cosas con características comunes (sintaxis del constructor azúcar)
clase de instancia generada Padre {. constructor(nombre = 'es6'){ este.nombre = nombre } } let data = new Parent('domesy') console.log(data) // Padre { nombre: 'domesy'}
la clase Padre { constructor(nombre = 'es6'){ este.nombre = nombre } } // Clase de herencia ordinaria Child extiende Parent {} console.log(new Child()) // Niño {nombre: 'es6'} // Pasar parámetros clase Niño extiende Padre { constructor(nombre = "niño") { super(nombre); this.type = "niño"; } } console.log(new Child('domesy')) // Child { name: 'domesy', type: 'child'}Los dos métodos
clase Padre { constructor(nombre = 'es6'){ este.nombre = nombre } // captador obtener obtenerNombre() { devolver 'sy' + este.nombre } // colocador establecer establecerNombre(valor){ este.nombre = valor } } let data = nuevo padre() console.log(data.getName) // syes6 data.setName = 'doméstico'console.log(data.getName) //
doméstico
class Parent { getName estático = (nombre) => { devolver `¡Hola! ${nombre}` } } console.log(Parent.getName('domesy')) // ¡Hola!
domésticas
clase Padre {} Padre.tipo = "prueba"; console.log(Parent.type); //test
Promise
es resolver el problema del "infierno de devolución de llamada" y puede hacer que el procesamiento de operaciones asincrónicas sea muy elegante.
Promise
puede admitir múltiples solicitudes simultáneas y obtener datos en solicitudes simultáneas. Esta Promise
puede resolver el problema asincrónico. No se puede decir que Promise
en sí sea
una definición asincrónica: Estado del objeto que contiene resultados de operaciones asincrónicas
:
Nota:
// Definición normal let ajax = (. devolución de llamada) => { consola.log('≈') setTimeout(() => { devolución de llamada && devolución de llamada.call(); }, 1000) } ajax(() => { console.log('tiempo de espera') }) // Primero se imprimirá para iniciar la ejecución, luego se imprimirá el tiempo de espera después de 1 segundo. //Promesa dejar ajax = () => { console.log("Iniciar ejecución"); devolver nueva Promesa((resolver, rechazar) => { setTimeout(() => { resolver(); }, 1000); }); }; ajax().entonces(() => { console.log("tiempo de espera"); }); // Primero se imprimirá para iniciar la ejecución, luego se imprimirá el tiempo de espera después de 1 segundo. //entonces() dejar ajax = () => { console.log("Iniciar ejecución"); devolver nueva Promesa((resolver, rechazar) => { setTimeout(() => { resolver(); }, 1000); }); }; ajax() .entonces(() => { devolver nueva Promesa((resolver, rechazar) => { setTimeout(() => { resolver(); }, 2000); }); }) .entonces(() => { console.log("tiempo de espera") }) // Primero se escribirá para iniciar la ejecución, luego se escribirá el tiempo de espera después de 3 segundos (1+2) // atrapar() let ajax = (núm) => { console.log("Iniciar ejecución"); devolver nueva Promesa((resolver, rechazar) => { si (núm > 5) { resolver(); } demás { throw new Error("Ocurrió un error"); } }); }; ajax(6) .entonces(función() { console.log("timeout"); // Comenzará la ejecución primero, luego el tiempo de espera se imprimirá después de 1 segundo. }) .catch(función (err) { console.log("catch", err); }); ajax(3) .entonces(funcion() { console.log("tiempo de espera"); }) .catch(función (err) { console.log("catch"); // Comenzará la ejecución primero, luego la captura después de 1 s. });
de
devolver nuevo promesa (resolve, rechazar) => { dejar img = document.createElement ("img"); img.src = src; img.onload = function () { resolver (img); }; img.onerror = function (err) { rechazar (err); }; }); } const showimgs = (imgs) => { imgs.forEach ((img) => { document.body.appendChild (IMG); }) } Promise.all ([[ loadimg ("https://ss0.baidu.com/7po3dsag_xi4khgko9wtanf6hhy/zhidao/pic/item/71cf3bc79f3df8dcc6551159cd11728b46102889.jpg"),, loadimg ("https://ss0.baidu.com/7po3dsag_xi4khgko9wtanf6hhy/zhidao/pic/item/71cf3bc79f3df8dcc6551159cd11728b46102889.jpg"),, loadimg ("https://ss0.baidu.com/7po3dsag_xi4khgko9wtanf6hhy/zhidao/pic/item/71cf3bc79f3df8dcc6551159cd11728b46102889.jpg"),,]
)
. Entonces (showImgs
{ devolver nuevo promesa (resolve, rechazar) => { dejar img = document.createElement ("img"); img.src = src; img.onload = function () { resolver (img); }; img.onerror = function (err) { rechazar (err); }; }); } const showimgs = (imgs) => { Sea p = document.createElement ("p"); P.AppendChild (IMG); document.body.appendChild (P); } Promesa.race ([ loadimg ("https://ss0.baidu.com/7po3dsag_xi4khgko9wtanf6hhy/zhidao/pic/item/71cf3bc79f3df8dcc6551159cd11728b46102889.jpg"),, loadimg ("https://ss0.baidu.com/7po3dsag_xi4khgko9wtanf6hhy/zhidao/pic/item/71cf3bc79f3df8dcc6551159cd11728b46102889.jpg"),, loadimg ("https://ss0.baidu.com/7po3dsag_xi4khgko9wtanf6hhy/zhidao/pic/item/71cf3bc79f3df8dcc6551159cd11728b46102889.jpg"),, ]. Entonces (
la función que se puede usar para controlar el iterador también es una solución de programación asíncrona que encapsula múltiples estados internos
.
done
value
done
value
恢复
la ejecución del programa. producir "A"; rendimiento "B"; regresar "C" } Let Generator = data (); console.log (generador.next ()) // {valor: 'a', hecho: falso} console.log (generador.next ()) // {valor: 'b', hecho: falso} console.log (generador.next ()) // {valor: 'c', hecho: true} console.log (generador.next ()) // {valor: indefinido, hecho: verdadero}iterador
es una interfaz que proporciona un mecanismo de acceso unificado para varias estructuras de datos. Mientras cualquier estructura de datos implementa la interfaz Iterator, puede completar la operación transversal (es decir, procesar a todos los miembros de la estructura de datos en secuencia).
Las funciones del iterador:
Nota:
Map结构
数组
Set
某些类似数组的对象
Map结构
.// Básicamente use Let arr = ["Hola", "Mundo"]; dejar map = arr [symbol.iterator] (); console.log (map.next ()); console.log (map.next ()); console.log (map.next ()); // para el bucle deja arr = ["hola", "mundo"]; para (dejar valor de arr) { console.log (valor); } // Procesamiento de objetos deja obj = { Inicio: [1, 5, 2], Fin: [7, 9, 6], [Símbolo.iterador](){ Let Index = 0; Deje arr = this.start.concat (this.end) devolver { próximo(){ if (index <arr.length) { devolver { Valor: arr [índice ++], Hecho: Falso } }demás{ devolver { Valor: arr [índice ++], hecho: verdadero } } } } } } para (dejar clave de obj) { console.log (clave); }
el
@
para extender y modificar el comportamiento de la clasecore-decorators
Target.name = "Muerme" } @nombre Prueba de clase {} console.log (test.name) //
En los primeros días, fue un método común para usar funciones de ejecución inmediata para lograr la modularización
. del uso de la modularización:
las soluciones de mantenimiento del código:
export default Index
export { name as newName }
import Index from './Index'
import * as Index from './Index'
import { name, value, id } from './Index'
import { name as newName } from './Index'
import './Index'
import Index, { name, value, id } from './Index'
export命令
import命令
combina en una línea. .
permita arr = [1, 2, 3, 4] // incluye () es6 console.log (arr.includes (3)) // Verdadero console.log ([1, 2, nan]. incluye (nan)); // incluye () es7 console.log (arr.includes (1, 0)) // Verdadero console.log (arr. includes (1, 1)) //Operador de energía
**
para representar Math.pow()
// Power Operator ES7 console.log (math.pow (2, 3)) // 8 console.log (2 ** 8) // 256
Deje str = 'domesy' // PadStart (): ¿Se llenará en forma de espacios? "0"); // 01 console.log ("8-27" .padstart (10, "aaa yyy-0m-0d");// padend
) console.log ("1" .padend (2, "0"));
deja obj = {nombre: 'domesy', valor: 'reaccionar'} //Object.values () console.log (objeto.values (obj)) // ['reaccionar', 'reaccionar'] //Object.entries () console.log (objeto.entries (obj)) // [['nombre', 'valor'], ['reaccionar', 'reaccionar']]
la función: cambiar la función asíncrona a la función sincrónica , (azúcar de sintaxis del generador)
const func = async () => { Let promise = new Promise ((resuelve, rechazar) => { setTimeout(() => { resolve ("ejecutar"); }, 1000); }); console.log (espera promesa); console.log (espera 0); console.log (espera promesa.resolve (1)); consola.log(2); Return promise.resolve (3); } func (). entonces (val => { console.log (val); / ejecutar en secuencia: ejecutar 0 1 2 3
}
)
forEach()
Promise
then
async/await
for-of
Promise.all()
try catch
reject
Hay dos situaciones: si se trata de un objeto de promesa
. Esta cosa no promocionada es la esperanza de la expresión.
Si está esperando un objeto de promesa, Await también detendrá el código detrás de Async, primero ejecutará el código de sincronización fuera de Async, espere a que se cumpla el objeto de promesa y luego use los parámetros de resolución como resultado de la operación de la expresión de espera.
Ventajas y:
claridad
undefined
se devuelve cuando se encuentra un escape de cadena ilegal, y la cadena original se puede obtener de raw
.// RELAJAS RESTRICCIONES DE CADRA CONST TEST = (VALOR) => { console.log (valor) } Prueba `domesy` // ['domesy', raw: [" domesy "]]
promety.finally ()
deja func = time => { Devuelve New Promise ((Res, REJ) => { setTimeout(() => { if (tiempo <500) { Res (tiempo) }demás{ REJ (tiempo) } }, tiempo) }) } diversión (300) .Then ((val) => console.log ('res', val)) .catch ((erro) => console.log ('rej', erro)) .finally (() => console.log ('terminado')) // Resultado de la ejecución: res 300 FUNC completado (700) .Then ((val) => console.log ('res', val)) .catch ((erro) => console.log ('rej', erro)) .finally (() => console.log ('terminado')) // Resultado de la ejecución: REJ 700 completó elaborado
: iterador asíncrono, Loop espera a que cada Promise对象
se resolved状态
antes de ingresar el siguiente paso
deje gettime = (segundos) => { Devuelve una nueva promesa (res => { setTimeout(() => { Res (segundos) }, segundos) }) } ASYNC Function test () { Deje arr = [GetTime (2000), GetTime (500), GetTime (1000)] para esperar (dejar x de arr) { consola.log(x); } } test () // Ejecutar 2000 500 1000
//json.stringify ( ) Actualizar console.log (json.stringify (" UD83D UDE0E"));console.log
u {d800}"));
Infinity
))Sea arr = [1, 2, 3, 4] // FlatMap () console.log (arr.map ((x) => [x * 2])); console.log (arr.flatmap ((x) => [x * 2])); console.log (arr.flatmap ((x) => [[x * 2]])); const arr1 = [0, 1, 2, [3, 4]]; const arr2 = [0, 1, 2, [[[3, 4]]]]; console.log (arr1.flat ()); console.log (arr2.flat (2));console.log
arr2.flat (infinito)
Object.entries()
deja mapa = nuevo mapa ([[ ["A", 1], ["B", 2], ]); Sea obj = object.FromEnries (map); console.log (obj
; ["A", 1], ["B", 2], ] dejar obj = object.FromEnries (arr);
(obj)
; A: 1, B: 2, C: 3 } Dejar res = objeto.Fromentries ( Object.entries (obj) .filter (([clave, val]) => valor! == 3) ) console.log (res) // {a: 1, b: 2}
// toString () función test () { Consople.log ('Muerme') } console.log (test.toString ()); // function test () { //consople.log('domesy ') //}
en ES10, try Catch puede ignorar los parámetros de captura
de dejar func = (name) => { intentar { Return Json.Parse (nombre) } atrapar { devolver falso } } console.log (func (1)) // 1 console.log (func ({a: '1'})) // falso
segura
pero
console.log (2 ** 53) // 9007199254740992 console.log (number.max_safe_integer) // 9007199254740991 // bigint const bigint = 9007199254740993N console.log (bigint) // 9007199254740993N console.log (typeof bigint) // bigint console.log (1n == 1) // Verdadero console.log (1n === 1) // falso const bigintnum = bigint (9007199254740993n) console.log (bigIntnum) // 9007199254740993NHay un total de 7
en ES6, a saber: srting
, number
boolean
object
null
undefined
symbol
nulo
Function
Array
Date
object
RegExp
8. Son: srting
, number
, boolean
, object
, null
, undefined
, symbol
, promesa de BigInt
. Allsettled ():
Promise.all()
mejorada. Promet.reject ({ Código: 500, MSG: "Excepción de servicio", }), Promet.resolve ({ Código: 200, Datos: ["1", "2", "3"], }), Promet.resolve ({ Código: 200, Datos: ["4", "5", "6"], }), ]). entonces ((res) => { console.log (res) // [{razon: {código: 500, msg: 'excepción de servicio'}, estado: "rechazado"}, // {razon: {código: 200, datos: ["1", "2", "3"]}, estado: "rechazado"}, // {Razón: {código: 200, datos: ["4", "5", "6"]}, estado: "rechazado"}] const data = res.filter ((item) => item.status === "Fulfilled"); console.log (datos); // {Razón: {código: 200, datos: ["4", "5", "6"]}, estado: "rechazado"}] })
import()
require()
importación require
// entonces () dejar modulepage = "index.js"; import (modulepage) .then ((módulo) => { módulo.init (); }); // Combinado con async espera (asincrónico () => { const modulepage = 'index.js' const módulo = ALEA IMPORT (MODULEPAGE); console.log (módulo) })
// navegador console.log (globalthis) // ventana //nodoconsole.log (globalthis) //
global? Representa
si
// antes de ES11 Sea a = user && user.name// ahora
B =
"||" Valor predeterminado "; ""? "Valor predeterminado"; const B = 0; const a = b || 5; console.log (a); const b = nulo // indefinido const a = b ?? 123; console.log
(
de Let str = "¡Hola!, esta es una nueva característica de ES6 ~ ES12, actualmente ES12" console.log (str.replace ("es", "sy")); , esta es una nueva característica de SY6 ~ ES12, actualmente es12 console.log (str.replace (/es/g, "sy")); , esta es una nueva característica de SY6 ~ SY12, actualmente es SY12 console.log (str.replaceall ("es", "sy")); , esta es una nueva característica de SY6 ~ SY12, actualmente es SY12 console.log (str.replaceall (/es/g, "sy")); , esta es una nueva característica de SY6 ~ SY12, actualmente Sy12
Promise.yy ()
Promesa. Cualquiera ([ Promet.reject ("tercero"), Promet.resolve ("segundo"), Promet.resolve ("primero"), ]) .Then ((res) => console.log (res)) // segundo .catch ((err) => console.error (err)); Promesa. Cualquiera ([ Promet.reject ("Error 1"), Promet.reject ("Error 2"), Promet.reject ("Error 3"), ]) .Then ((res) => console.log (res)) .catch ((err) => console.error (err)); // AggregateError: todas las promesas fueron rechazadas Promesa. Cualquiera ([ Promise.resolve ("tercero"), Promet.resolve ("segundo"), Promet.resolve ("primero"), ]) .Then ((res) => console.log (res)) // tercero.catch ((
err));
Let WeakRef = New WeakRef ({Nombre: 'Domingo', año: 24}) débilf.deref () // {nombre: 'domesy', año: 24} débilf.deref (). año // 24
let num1 = 5; Sea num2 = 10; num1 && = num2; console.log (num1); // equivalente a num1 && (num1 = num2); if (num1) { num1 = num2; }
let num1; Sea num2 = 10; num1 || = num2; console.log (num1); // equivalente a num1 || (num1 = num2); if (! num1) { num1 = num2; }
Sea num2 = 10; Dejar num3 = nulo; num1 ?? = num2; console.log (num1); num1 = falso; num1 ?? = num2; console.log (num1); num3 ?? = 123; console.log (num3); // equivalente a // num1 ?? (num1 = num2
)
Dejar num2 = 100_000; console.log (num1); console.log (num2); const num3 = 10.12_34_56 console.log (num3);