Поддержка ECMAScript 5 и ECMAScript 6 Harmony в браузерах уже сейчас
Небольшое пояснение для тех кому слова ECMAScript и Harmony ни о чем не говорят. ECMAScript это спецификация языка, на основе которой развивается наш с вами JavaScript. А Harmony это следующая версия ECMAScript, работа над которой сейчас активно ведется. Теперь немного о том какие изменения произошли в этих версиях и какова текущая поддержка в браузерах.
ECMAScript 5
Это первое большое изменение спецификации, разработка которой шла около 10 лет. И, к сожалению, только недавно браузеры начали активное внедрение нового функционала. Коротко о том, что нового пришло с ECMAScript 5.
Array extras
- Array.forEach
- Array.map
- Array.every
- Array.filter
- Array.some
- Array.indexOf
- Array.lastIndexOf
- Array.isArray
Object extras
- Object.create
- Object.keys
- Object.defineProperty
- Object.defineProperties
- Object.getOwnPropertyDescriptor
- Object.getOwnPropertyNames
- Object.preventExtensions
- Object.isExtensible
- Object.seal
- Object.isSealed
- Object.freeze
- Object.isFrozen
Так же добавлена поддержка native JSON, getters и setters, метода bind
для Function и strict режим.
На данный момент, только самые современные браузеры более-менее полно поддерживают ECMAScript 5. Среди них >= IE9, >= Firefox 4, >= Safari 5.1, >= Chrome 13, >= Opera 12. Полную таблицу поддержки спецификации можно посмотреть здесь.
ECMAScript 6 или Harmony
В данный момент спецификация не закончена. На мой взгляд это самое большое, структурное и синтаксическое изменение языка за все время. Спецификация довольно объемная, поэтому я остановлюсь только на самом интересном для себя.
let
— точно так же какvar
ограничивает видимость переменных в пределах функции,let
ограничивает видимость переменных в пределах блока.const
— создание read-only констант.- Maps и WeakMap — для работы с объектами ключ/значение.
Кстати, CoffeeScript очень помог развитию Harmony, вот изменения в спецификации напрямую перешедшие из него:
- Реструктуризующее присваивание (destructuring assignment).
- Возможность указывать значения параметров функции по-умолчанию.
- Операторы сравнения is и isnt.
Так же расширение методов Function
, String
, Number
, Object
, RegExp
, Math
и другие изменения.
Поддержка в текущих браузерах достаточно слабая, однако в отдельных браузерах части спецификации уже реализованы. Полную таблицу поддержки спецификации можно посмотреть здесь.
Все это здорово, но я хочу сейчас!
Специально для тех кто хочет уже сейчас писать по спецификации и не думать работает это в их браузере или нет созданы два проекта: es5-shim и es6-shim. Оба этих проекта реализуют функционал из спецификации недоступный текущему браузеру. Разумеется речи не идет о полной поддержки, однако большинство полезных новшеств уже работают хорошо.