Какие браузеры в настоящее время поддерживают ключевое слово let в JavaScript?

80

Я разрабатываю приложение, и мне не нужно беспокоиться об Internet Explorer, и я изучал некоторые функции, присутствующие в браузерах класса A +, которых нет в Internet Explorer1.

Одна из этих функций, с которой я хотел поиграть, - ключевое слово let в JavaScript.

Кажется, я не могу заставить работать ни один из их примеров let в Firefox 3.6 ( строка User-Agent : 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)). Я получаю SyntaxError: missing ; before statementпри исполнении let foo = "bar".

Итак, какие браузеры поддерживают ключевое слово let? (Или я что-то не так делаю?)

Дэвид Мердок
источник
В то время как вы понимаете и соглашаетесь с тем, что ваше "не заботится о том, работает ли это с IE", вы должны учитывать, что ключевое слово "let" предназначено только для Mozilla, поэтому даже если можно сказать, что "IE не поддерживает его", правильное так сказать, "только Mozilla поддерживает это". Точно так же, как мы избегаем тегов или ключевых слов только для IE, вам следует избегать ключевых слов и *.
WhyNotHugo
Хьюго, вы должны помнить, что HTML, CSS, JS больше не являются веб-платформой. Это код, который никогда не будет запускаться ни в одной версии IE или в любом веб- браузере, если на то пошло. :-)
Дэвид Мердок
Что, черт возьми, пытается сделать Apple ... Сейчас 2015 год, и никаких признаков letподдержки в их жалком браузере.
Салман фон Аббас
3
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ! Многие старые ответы (включая принятый) были заменены событиями. Все основные современные браузеры поддерживают letключевое слово ES2015 (также известное как «ES6») , но на момент написания этой статьи поддержка в некоторых кругах является довольно новой (например, только iOS 10 Safari).
TJ Crowder
Я предлагаю изменить принятый ответ на один из правильных на данный момент. Да, принятый в настоящее время вариант был правильным в то время, но он был неправильным уже несколько лет, и цель SO - быть хранилищем знаний, а не историческим архивом. :-)
TJ Crowder

Ответы:

56

РЕДАКТИРОВАТЬ : letи constподдерживаются всеми современными браузерами и являются частью ECMAScript 2015 (ES6) спецификации .

В основном, если вам не нужно поддерживать что-либо ниже IE11, letиconst безопасно использовать в настоящее время.

В IE11 есть небольшая особенность: letпри использовании с forциклами переменная не привязана к forблоку, как вы ожидали, она ведет себя какvar же ...

См. Также: let и const support.


Старый и устаревший ответ 2010 года: эти расширения не являются стандартом ECMA, они поддерживаются только реализацией Mozilla.

В среде браузера вы должны включить номер версии JavaScript в свой scriptтег, чтобы использовать его:

<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>
Кристиан К. Сальвадо
источник
1
Хорошо; Я только что обновил свой ответ, а потом узнал, что вы меня обыграли через минуту;). +1
Хармен
1
Спасибо, я использовал HTML 5 «<script> </script>» без типа attr.
Дэвид Мердок
19
Обратите внимание , что letключевое слово в настоящее время в 6 (проект) стандарта ECMAScript.
Нико Бернс
3
Можно включить в Chrome 19+ с помощью флага «Экспериментальные функции Javascript» и в node.js с помощью --harmony.
Салман фон Аббас
2
Все ;version=1.7еще требуется в Firefox? Я попробовал letв консоли, и это сработало.
sam
31

По состоянию на апрель 2017 г .:

  • Все современные основные браузеры, такие как Chrome, Firefox и Edge, поддерживают letключевое слово ES2015 (также известное как «ES6») .

  • iOS Safari не поддерживал letдо OS 10 (например, OS 9 не поддерживала ).

  • Некоторые старые браузеры, такие как IE9-IE11, поддерживают раннюю версию, letно не поддерживают семантику, определенную ES2015 (особенно в отношении объявлений в заголовках forциклов). Так что это не синтаксическая ошибка, и переменная объявляется, но работает не так, как предполагалось. Например, в правильной реализации следующие журналы 0, 1 и 2; в IE9-IE11 он регистрирует 3, 3, 3:

  • Устаревшие браузеры, такие как IE8, его вообще не поддерживают.

TJ Crowder
источник
1
Полезный ответ: +1.
MWiesner
25

Существует частичная поддержка в Internet Explorer 11 ( forневерная область действия ) и полная поддержка во всех текущих браузерах ( таблица совместимости ECMAScript 6: let ).

Сэм
источник
1
Хотя IE11 «поддерживает» letключевое слово (в том смысле, что он не генерирует a SyntaxError), его реализация не соответствует спецификации - переменная не имеет должной блочной области видимости. (также обратите внимание, что нет и никогда не будет IE после 11)
CertainPerformance
12

Internet Explorer и Opera не поддерживаютlet ни в одной из версий браузеров, Firefox с версии 2.0 и Safari с версии 3.2.

См. Эту таблицу версий JavaScript в Википедии.

Я только что узнал, что вам нужно определить, используете ли вы JavaScript 1.7 или нет. Итак, ваш код будет:

<script type="application/javascript;version=1.7"> ... </script>
Хармен
источник
Похоже, эта спецификация версии устарела. Если я попытаюсь указать версию, Chrome не загружает этот javascript.
Jay Shah
3

Прошло много времени с тех пор, как этот вопрос был задан впервые: ключевые слова let и const были введены в ECMAScript 2015 (ES6). Найдите 'let' или 'const' в этой удивительной таблице совместимости с ES6: https://kangax.github.io/compat-table/es6/

Питер Хемерик
источник
2

Просто обновление: Chrome теперь поддерживает, letно только если вы объявите "use strict"; директива.

Мэтью
источник