javascript - nodejs - Características de ECMAScript 6 disponibles en Node.js 0.12
nodejs es7 support (2)
Recientemente se ha lanzado una nueva versión estable de Node.js (0.12) con un motor JavaScript v8 de Google actualizado, v3.28.73 .
¿Qué características de ECMAScript 6 están presentes actualmente en Node.js, sin usar el indicador
--harmony
?
He comprobado varios sitios que dicen enumerar las características de ES 6, pero todos parecen estar desactualizados; lo más destacado es
esta tabla
(
Actualización:
ahora actualizada con el estado actual de Node.js a partir de 0.12
), porque varias de las características están listadas como requiriendo la bandera
--harmony
mientras encontré algunos de ellos habilitados por defecto (Mapas, Conjuntos, Símbolos, por nombrar algunos).
Actualización
: desde entonces se han puesto a disposición
tablas específicas de nodo
Además, tratar de buscar en Google esta información únicamente para el motor v8 proporciona información demasiado actualizada: la versión actual de v8 es 4.2. * , Que está bastante por delante de lo que usa Node.js.
Espero que esta pregunta (y sus respuestas) se conviertan en un resumen exhaustivo de las características de ES 6 que ahora están disponibles para los desarrolladores de Node.js.
Funciones de ES 6 habilitadas en Node.js 0.12 Actualmente conozco:
- Mapas, conjuntos / mapas débiles, conjuntos débiles
- Los símbolos
- Object.observe
- Promesas
-
Número
- .isInteger
- .isSafeInteger
- .isNaN
- .EPSILON
- .MIN_SAFE_INTEGER
- .MAX_SAFE_INTEGER
-
Matemáticas
- .clz32
- .imul
- .firmar
- .log10
- .log2
- .log1p
- .expm1
- .aporrear
- .sinh
- .tanh
- .acosh
- .asinh
- .atanh
- .trunc
- .fround
- .cbrt
- .hypot
Las características de ES6 se filtran hasta Nodo en fases. Node utiliza el V8 de Google como motor de JavaScript. Una característica admitida en Node significa que primero debe implementarse en V8 y luego el equipo de Node debe incorporarla en Node.js.
El equipo de Google lanza una nueva versión de V8 aproximadamente cada seis semanas, y luego depende del equipo Node ponerla en uso.
Las listas de características del lenguaje seleccionadas manualmente son agradables, pero pueden quedar desactualizadas rápidamente. El nodo 0.12 ya no está en flujo, pero por lo general, la lista curada manualmente se vuelve obsoleta tan pronto como se lanza una nueva versión del nodo.
Aquí hay dos formas alternativas de verificar qué características admite una versión Node, sin depender de una lista estática. Para leer más y obtener ejemplos más detallados sobre el uso de estos, puede consultar "Cómo verificar si Node.js admite la función de idioma ES 6"
# 1 Fácil - tabla de compatibilidad
Una lista generada dinámicamente que se basa en pequeñas pruebas para confirmar la presencia de una función de idioma se mantiene mejor actualizada. Una de estas listas populares es kangax.github.io/compat-table/es6/. Solo nos interesan las funciones de nodo, por lo que puede usar
que aprovecha los mismos datos que el sitio kangax.
# 2 Hard - versión V8 de retroceso
Node usa el motor V8, por lo que determinar qué versión de V8 está incluida en Node nos dice qué características del lenguaje ES6 son compatibles.
Puede averiguar qué versión de V8 se incluyó en Node con el
node -p process.versions.v8
.
$ node -p process.versions.v8
4.6.85.31
Luego, utilizando los recursos del proyecto V8 de Google, puede encontrar qué características se implementan en cada versión. El proyecto V8 mantiene un rastreador de problemas donde puede encontrar ES6 + más allá de las características marcadas con la etiqueta de armonía .
Características sin bandera de
--harmony
:
- bucle "para-de"
- Map , Set , WeakMap , WeakSet (ya especificado en la pregunta)
- Symbol (ya especificado en la pregunta)
- Promise (ya especificada en la pregunta)
- Métodos de matriz:
-
Objeto:
- .observe() (inicialmente se planeó para ES7 , pero se eliminó por completo de la especificación el 2 de noviembre de 2015)
- .is()
- .setPrototypeOf()
- .getOwnPropertySymbols()
- .getNotifier () (no es6, ejemplo aquí )
- .apply () y .call () (no es6, el mismo propósito que Funciton.prototype.call y Function.prototype.apply)
- Propiedades numéricas y métodos (ya especificados en la pregunta)
- Métodos matemáticos ( muchos de ellos ) (ya especificados en la pregunta)
- constants
Creo que eso es todo lo que tenemos sin la bandera de la
--harmony
.
Características con la bandera de la
--harmony
:
- generators
-
funciones de flecha
(sin necesidad de la bandera
io.js
en contraste conio.js
) -
dejar variables
: solo en
strict mode
- Literales binarios y octales
-
Métodos de cadena:
- .contains() (fue reemplazado por .contains() en la especificación ES6 real)
- .startsWith()
- .endsWith()
- .codePointAt()
- .repeat()
- .normalize()
- String.fromCodePoint
-
Proxy (detrás de la bandera
--harmony-proxies
)
Creo que eso es todo. Tal vez si olvidé algo, lo agregaré más tarde a la lista.