¿Qué navegadores admiten actualmente la palabra clave "dejar" de JavaScript?

80

Estoy desarrollando una aplicación y no tengo que preocuparme nunca por Internet Explorer y estaba investigando algunas de las características presentes en los navegadores de grado A + que no están en Internet Explorer1.

Una de estas características con las que quería jugar es la palabra clave let de JavaScript

Parece que no puedo conseguir que ninguno de sus ejemplos de 'permitir' funcione en Firefox 3.6 ( cadena de usuario-agente : Mozilla / 5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.9.2) Gecko / 20100115 Firefox / 3.6 (.NET CLR 3.5.30729)). Me sale SyntaxError: missing ; before statemental ejecutar let foo = "bar".

Entonces, ¿qué navegadores admiten la palabra clave let? (¿O estoy haciendo algo mal?)

David Murdoch
fuente
Aunque entienda y esté de acuerdo con su no-importa-si-funciona-en-IE, debe considerar que la palabra clave "dejar" es solo para mozilla, por lo que incluso si está bien decir "IE no lo admite", el manera de decirlo, sería "sólo mozilla lo admite". Del mismo modo que evitamos las etiquetas o palabras clave de solo IE, debe evitar las palabras clave de solo *.
WhyNotHugo
Hugo, debes tener en cuenta que HTML, CSS, JS ya no es una plataforma solo web. El código resulta ser un código que nunca se ejecutará en ninguna versión de IE, ni en ningún navegador web , de hecho. :-)
David Murdoch
¿Qué diablos está tratando de hacer Apple? Es 2015 y no hay señales de letsoporte en su patético navegador.
Salman von Abbas
3
TENGA EN CUENTA Muchas de las respuestas anteriores (incluida la respuesta aceptada) han sido superadas por eventos. Todos los principales navegadores actualizados admiten la letpalabra clave ES2015 (también conocida como "ES6") , pero a partir de este momento, el soporte es bastante nuevo en algunos círculos (solo iOS 10 Safari, por ejemplo).
TJ Crowder
Sugiero cambiar su respuesta aceptada por una de las ahora correctas. Sí, el actualmente aceptado era correcto en ese momento, pero ha sido incorrecto durante varios años, y el propósito de SO es ser un depósito de conocimiento, no un archivo histórico. :-)
TJ Crowder

Respuestas:

56

EDITAR : lety constson compatibles con todos los navegadores modernos y forman parte de la especificación ECMAScript 2015 (ES6) .

Básicamente, si no necesita admitir nada por debajo de IE11 lety constes seguro usarlo hoy en día.

En IE11 hay una pequeña peculiaridad letcuando se usa con forbucles, la variable no está vinculada al forbloque como era de esperar, se comporta como lo varhizo ...

Ver también: let y const support.


Respuesta antigua y desactualizada de 2010: esas extensiones no son ECMA-Standard, solo son compatibles con la implementación de Mozilla.

En entornos de navegador, debe incluir el número de versión de JavaScript en su scriptetiqueta para usarlo:

<script type="application/javascript;version=1.7">  
  var x = 5;
  var y = 0;

  let (x = x+10, y = 12) {
    alert(x+y + "\n");
  }

  alert((x + y) + "\n");
</script>
Christian C. Salvadó
fuente
1
Bien; Acabo de actualizar mi respuesta y luego descubrí que me ganaste en un minuto;). +1
Harmen
1
Gracias, estaba usando '<script> </script>' de HTML 5 sin el tipo attr.
David Murdoch
19
Tenga en cuenta que la letpalabra clave ahora está en el estándar ECMAscript 6 (borrador).
Nico Burns
3
Se puede habilitar en Chrome 19+ a través del indicador "Funciones experimentales de Javascript" y en node.js usando --harmony.
Salman von Abbas
2
¿ ;version=1.7Sigue siendo necesario en Firefox? Probé leten la consola y funcionó.
sam
31

A abril de 2017:

  • Todos los principales navegadores actualizados, como Chrome, Firefox y Edge, admiten la letpalabra clave ES2015 (también conocida como "ES6") .

  • iOS Safari no fue compatible lethasta OS 10 (por ejemplo, OS 9 no lo hizo).

  • Algunos navegadores más antiguos, como IE9-IE11, admiten una versión anterior, letpero no admiten la semántica definida por ES2015 (particularmente en relación con las declaraciones en los encabezados de los forbucles). Por lo tanto, no es un error de sintaxis y declara la variable, pero no funciona como se supone que debe hacerlo. Por ejemplo, en una implementación correcta, los siguientes registros 0, 1 y 2; en IE9-IE11, registra 3, 3, 3:

  • Los navegadores obsoletos como IE8 no lo admiten en absoluto.

TJ Crowder
fuente
1
Una respuesta útil: +1.
MWiesner
25

Hay soporte parcial en Internet Explorer 11 (el foralcance es incorrecto ) y soporte completo en todos los navegadores actuales ( tabla de compatibilidad de ECMAScript 6: let ).

sam
fuente
1
Si bien IE11 "admite" la letpalabra clave (en el sentido de que no arroja a SyntaxError), su implementación no se ajusta a la especificación: la variable no tiene un alcance de bloque adecuado. (tenga en cuenta también que no hay ni habrá ningún IE después del 11)
CertainPerformance
12

Internet Explorer y Opera no son compatibles letcon ninguna versión del navegador, Firefox desde la versión 2.0 y Safari desde la 3.2.

Consulte esta tabla de versiones de JavaScript en Wikipedia.

Me acabo de enterar de que necesitas definir si usas JavaScript 1.7 o no. Entonces tu código será:

<script type="application/javascript;version=1.7"> ... </script>
Harmen
fuente
Parece que esta especificación de versión está obsoleta ahora. Si intento especificar la versión, Chrome no carga ese javascript.
Jay Shah
3

Ha pasado mucho tiempo desde que se hizo esta pregunta por primera vez: las palabras clave 'let' y 'const' se han introducido en ECMAScript 2015 (ES6). Busque 'let' o 'const' en esta increíble tabla de compatibilidad de ES6: https://kangax.github.io/compat-table/es6/

Pieter Heemeryck
fuente
2

Solo una actualización: Chrome ahora es compatible, letpero solo si declaras "use strict"; directiva.

Mateo
fuente