The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

17.06.2015 22:21  Утверждён стандарт ECMAScript 6

На очередном собрании Генеральной Ассамблеи ECMA официально утверждён стандарт ECMAScript 2015 (PDF), более известный как ECMAScript 6 или "ECMA-262 6th edition". ECMAScript 6 продолжает линейку стандартов, определяющих базовые функциональные возможности JavaScript, реализованные для всех web-браузеров. Прошлый стандарт ECMAScript 5 был принят в 2009 году, а позапрошлый в 1999 году. Долгое время развитие стандарта было заморожено из-за трудноразрешимых разногласий среди производителей браузеров, одни из которых выступали за внесение значительных изменений в JavaScript, а другие настаивали на сохранении полной семантической совместимости.

Основные нововведения ECMAScript 6:

  • Поддержка классов. Например:
    
      class Polygon {
        constructor(height, width) {
           this.name = 'Polygon';
           this.height = height;
           this.width = width;
        }
    
        sayName() {
           log('Hi, I am a ', this.name + '.');
        }
      } 
    
      let p = new Polygon(300, 400);
    
    
  • Шаблоны строк, предоставляющие удобные средства для форматирования строк. Шаблоны строк являются строковыми литералами, допускающими встраивание выражений. Выражения определяются в размещённом внутри строки блоке ${...}, который может включать как отдельные переменные (${name}), так и выражения (${5 + a + b})). Например, в результате выполнения "var message = '1 + 1 = ${1 + 1}'" в переменную будет записана строка "1 + 1 = 2";
  • Поддержка лексических объявлений переменных (Lexical Declarations), позволяющих ограничить текущим блоком область видимости ключевых слов, через их повторное определение при помощи оператора let вместо var.
  • Оператор const для определения переменных, доступных только для чтения;
  • Модули. Для экспорта и импорта модулей введены операторы export и import, например, "import * as mymodule from "lib/mymodule". Предоставляются средства динамической загрузки модулей, пространства имён и изоляция состояния.
  • Arrow-функции позволяющие использовать синтаксис "=>" для быстрого определения анонимных функций (например, "x.map(x => console.log(x * x));") и ключевое слово "this" для доступа к текущему лексическому контексту функции;
  • Сокращённый формат задания объектов (например, "var a = {obj1, obj2}" вместо "var a = {'obj1': obj1, 'obj2': obj2}");
  • Тип Symbol, применимый для идентификаторов свойств объектов;
  • Генераторы, позволяющие организовать эффективное выполнение функций в асинхронном режиме. Генераторы представляют собой специальные функции, генерирующие итераторы. Использование выражения yield для генератора, позволяет приостановить его выполнение и вернуть управление вызвавшей генератор функции. Особенность генераторов состоит в том, что последующие вызовы будут использовать предыдущее состояние и продолжат выполнение кода генератора с того места, где он был приостановлен.
  • Объект WeakSet, позволяющий определить множество из объектов, и объект WeakMap, определяет коллекцию пар ключ/значение в которых ключ является объектом, к которому может быть прикреплено произвольное значение. WeakSet и WeakMap отличаются использованием эффективных с точки зрения потребления памяти структур, использующих сборщик мусора для удаления неиспользуемых объектов (объект удаляется, если на него больше не осталось ссылок, кроме ссылки из текущей коллекции) и предотвращающих возникновение утечек памяти;
  • Механизм Promise, предназначенный для получения значений в асинхронном режиме. Позволяет определить значение, которое пока неизвестно, но будут определено через какое-то время;
  • Возможность определения значений по умолчанию для аргументов функций (например, "function myfunc(a='test', b=1)");
  • Возможность передачи в функцию произвольной группы параметров в форме массива (например, "function myfunc(a, b, ...c)");
  • Новая форма слияния массивов (например, "var a= [3,4]; var b = [1,2,...a])";
  • Cтруктуры данных Map и Set, упрощающих работу со специфичными типами коллекций. Map позволяет определять коллекции наборов в формате ключ/значение, при том, что в качестве ключа и значения могут выступать любые выражения JavaScript. По аналогии Set позволяет задать множество любых выражений JavaScript;
  • Поддержка абстракции массивов (Array comprehensions), дающих возможность создания нового массива на основе другого массива;
  • Большая порция новых методов для строк, массивов и математических операций, в том числе Array.from(), Array.prototype.keys, Array.prototype.entries, Array.prototype.copyWithin(), Number.isSafeInteger(), Math.fround(), Math.ToFloat32(), startsWith(), endsWith(), contains(), clear() и Math.imul;


  1. Главная ссылка к новости (https://mail.mozilla.org/piper...)
  2. OpenNews: Google развивает AtScript, вариант JavaScript с аннотациями типов
Лицензия: CC-BY
Тип: Интересно / К сведению
Ключевые слова: ecmascript, javascript
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение Линейный вид | Ajax | Показать все | RSS
 
  • 1.9, Аноним, 23:03, 17/06/2015 [ответить] [смотреть все]
  • +9 +/
    Замечаю в последнее время как Джависты переходя на JS, тащят с собой весь свой легаси-абстрактный-бред вроде DAO с кучей не делающего ничего кода
     
     
  • 2.37, Аноним, 06:30, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    А как у них может получаться тащить его с собой, они что переписывают этот код н... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.62, КО, 17:22, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    GWT
     
  • 3.70, Аноним, 23:26, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    да, переносят свой мега-абстрактный код на JS, Фабрики там другую хрень, без по... весь текст скрыт [показать]
     
     
  • 4.78, Crazy Alex, 03:56, 19/06/2015 [^] [ответить] [смотреть все]  
  • +3 +/
    Их нужность зависит не от языка, а больше от размеров проекта В смысле - это ус... весь текст скрыт [показать]
     
  • 2.79, Другой аноним, 09:25, 19/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Нет, не переходят, но добавляют в свой инструментарий - Кхм, по моему DAO одна... весь текст скрыт [показать] [показать ветку]
     
  • 1.11, Аноним, 23:28, 17/06/2015 [ответить] [смотреть все]  
  • +/
    Эту python-фичу в следующую версию планируют ES7, правда её обещают выпустить г... весь текст скрыт [показать]
     
  • 1.14, Аноним, 00:13, 18/06/2015 [ответить] [смотреть все]  
  • +/
    Что, целочисленных типов так и не ввели? Зря. В Lua вон уже есть.
     
     
  • 2.87, AlexYeCu, 15:02, 21/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Разработчик LuaJIT сказал, что для новой версии Lua ничего делать не будет лэнг... весь текст скрыт [показать] [показать ветку]
     
  • 1.15, Crazy Alex, 01:07, 18/06/2015 [ответить] [смотреть все]  
  • +2 +/
    С такими map, для которых get/set надо писать, пусть они пройдут лесом, а дальше полем. Покосят травы, покурят и оставят IT кому-нибудь другому.
     
     
  • 2.16, Lain_13, 01:17, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • –3 +/
    Я что-то не понял щито тебя не устраивает В обычных map тоже get set есть и что... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.20, Crazy Alex, 01:57, 18/06/2015 [^] [ответить] [смотреть все]  
  • +5 +/
    Меня бесит это убогое джавовское многословие Нормальный вариант использовал бы ... весь текст скрыт [показать]
     
     
  • 4.32, Lain_13, 03:25, 18/06/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    И как предлагаешь объявлять WeakMap если наделить пустой объект свойствами обычн... весь текст скрыт [показать]
     
     
  • 5.51, Crazy Alex, 13:28, 18/06/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Да масса вариантов, как объявлять - один хрен это магия движка, а не библиотечны... весь текст скрыт [показать]
     
     
  • 6.55, Аноним, 13:56, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    а если историю про Dart вспомнить подвижка конечно хорошая, но лишь бы до масс ... весь текст скрыт [показать]
     
     
  • 7.74, Crazy Alex, 03:26, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Разница очень проста Дарт - это был только гугл Здесь - гугл, мозилла и майкро... весь текст скрыт [показать]
     
  • 3.21, _Vitaly_, 02:00, 18/06/2015 [^] [ответить] [смотреть все]  
  • +6 +/
    cинтакcиc не юзабельный
     
  • 3.26, Crazy Alex, 02:32, 18/06/2015 [^] [ответить] [смотреть все]  
  • +3 +/
    О, там совсем круто - оно даже в JSON не экспортируется обычным JSON stringify ... весь текст скрыт [показать]
     
     
  • 4.34, Lain_13, 03:51, 18/06/2015 [^] [ответить] [смотреть все]  
  • +2 +/
    А то, что WeakMap и WeakSet оперируют объектами и то, что у объектов могут быть ... весь текст скрыт [показать]
     
     
  • 5.50, Crazy Alex, 13:24, 18/06/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Конечно смущает По уму - должен быть штатный механизм, позволяющий прибить к об... весь текст скрыт [показать]
     
     
  • 6.58, Lain_13, 16:00, 18/06/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    Штатного метода сериализации объектов не существует хотя бы потому, что они могу... весь текст скрыт [показать]
     
     
  • 7.75, Crazy Alex, 03:37, 19/06/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Дык, я о чём Именно автор объекта И этот сериализатор должен быть автоматом за... весь текст скрыт [показать]
     
  • 1.17, Jason, 01:32, 18/06/2015 [ответить] [смотреть все]  
  • +2 +/
    Не очень понимаю, зачем нужны классы, если они и так де-факто присутствуют. Javascript же prototype-based уже. Чем class newClass{constructor()} удобнее, чем function Class(){}? Неужели только тем, что первый метод - буквальнее? Все равно расширять, добавлять методы и т.п. придется через someClass.prototype. Или у этих новых классов есть какие-то еще крутые фичи?
    Не понимаю зачем нарушать дзен функционального минимализма и превращать JS в монстра типа PHP.

    Помогите разобраться, чего я недопонял?

     
     
  • 2.19, Lain_13, 01:55, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Строго говоря смысла делать new func тоже нет Можно и даже нужно писать так ... весь текст скрыт [показать] [показать ветку]
     
     
     
    Часть нити удалена модератором

  • 4.35, Lain_13, 04:23, 18/06/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    А теперь создадим новый объект и расширим его, добавив функцию площади let Area... весь текст скрыт [показать]
     
     
  • 5.45, Аноним, 11:52, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    ok а как в вашем примере переопределить метод-функцию класса-объекта, при это в... весь текст скрыт [показать]
     
     
  • 6.57, Lain_13, 15:20, 18/06/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    Не уверен, что это корректный способ, но лично я сделал бы вот так AreaPolygon ... весь текст скрыт [показать]
     
     
  • 7.59, Аноним, 16:25, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    твой пример не работает, ну а трансляторы генерируют в два раза больше кода если... весь текст скрыт [показать]
     
     
  • 8.61, Lain_13, 16:52, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    У меня в консоли фокса так let Polygon create function height, width... весь текст скрыт [показать]
     
     
  • 9.64, Аноним, 17:55, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    var Polygon create function height, width let self Object create... весь текст скрыт [показать]
     
     
  • 10.68, Lain_13, 18:57, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Вот такое вот получилось var AreaPolygon Object create Polygon AreaPolygon ... весь текст скрыт [показать]
     
     
  • 11.80, Аноним, 11:38, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    ага, интересно Единственное на сайте developer mozilla org ru docs Web JavaScri... весь текст скрыт [показать]
     
     
  • 12.82, Lain_13, 13:08, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Надо будет запомнить Спасибо Кстати, вместо set и get можно писать про... весь текст скрыт [показать]
     
     
  • 13.83, Аноним, 15:16, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    ок, благодарю полезный тред получился.
     
  • 8.63, Lain_13, 17:39, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    А вот вариант твоего кода без классов var Creature create function name ... весь текст скрыт [показать]
     
     
  • 9.65, Аноним, 18:01, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    gt оверквотинг удален ага, не увидел сразу твой ответ, сам примерно так написа... весь текст скрыт [показать]
     
  • 6.71, Алконим, 02:27, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    AreaPoligon sayName function super return function return It s super ... весь текст скрыт [показать]
     
  • 2.22, Crazy Alex, 02:06, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    навскидку - нельзя вызвать напрямую, без new - частая и тупая ошибка с function... весь текст скрыт [показать] [показать ветку]
     
  • 2.25, Jason, 02:13, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Ребята, спасибо!

    P.S.: Про extends - действительно, напоминает монстра PHP.

     
     
  • 3.27, Crazy Alex, 02:33, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Минимализм хорош в минималистичных программах, а когда у тебя кода столько, что ... весь текст скрыт [показать]
     
     
  • 4.43, Аноним, 10:36, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Я конечно понимаю что js применяют где попало и не совсем по назначению, но всё ... весь текст скрыт [показать]
     
     
  • 5.52, Crazy Alex, 13:30, 18/06/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Посмотри, сколько весят какие-нибудь гуглодоки, или морда групвари Да и на обыч... весь текст скрыт [показать]
     
  • 1.23, Crazy Alex, 02:09, 18/06/2015 [ответить] [смотреть все]  
  • +2 +/
    Что-то у меня сильное подозрение, что теперь они в седьмой версии смогут с чистой совестью задепрекейтить прототипы, так как их никто не будет использовать кроме пары упрямцев. У них было ровно два применения, насколько я видел - рискованные извращения с существующими объектами вроде того, что творил Prototype и, собственно, эмуляция классов. Или есть ещё какие-то примеры где оно действительно надо?
     
     
  • 2.28, Jason, 02:57, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Для этого нет никаких причин Prototype- и Class based OOP - две разные парадигм... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.29, Crazy Alex, 03:12, 18/06/2015 [^] [ответить] [смотреть все]  
  • +2 +/
    Ну, об этом advantage я упоминал - и в конце концов стало общепризнанным, что ... весь текст скрыт [показать]
     
     
  • 4.38, freehck, 07:47, 18/06/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Эдак Вы дойдёте до утверждения, что любое порождение процедуры ли, объекта или п... весь текст скрыт [показать]
     
     
  • 5.44, Аноним, 10:41, 18/06/2015 [^] [ответить] [смотреть все]  
  • –1 +/
    До того что нужно заменить js на java с ограниченным набором core библиотек ... весь текст скрыт [показать]
     
     
  • 6.85, freehck, 01:29, 20/06/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Ох, да делайте, что хотите с этой Вашей ненаглядной явой Только мне не сватайте... весь текст скрыт [показать]
     
  • 5.53, Crazy Alex, 13:40, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Вот насчёт Существуют задачи, решение которых существенно упрощается при таком ... весь текст скрыт [показать]
     
     
  • 6.84, freehck, 01:27, 20/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Ну, тут весь вопрос, выигрыш в чём именно Вас интересует В производительности -... весь текст скрыт [показать]
     
  • 5.72, Алконим, 02:34, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    JavaScript - это Lisp Scheme с синтаксисом похожим на Java A company called Ne... весь текст скрыт [показать]
     
     
  • 6.86, freehck, 01:37, 20/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Спасибо, не знал Впрочем, если весь JS - это синтаксический сахар для того, что... весь текст скрыт [показать]
     
  • 5.73, Алконим, 02:37, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    http www crockford com javascript little html ... весь текст скрыт [показать]
     
  • 4.67, _Vitaly_, 18:57, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Ну на ходу перековыривать прототипы это действительно полный ахтунг А вот растя... весь текст скрыт [показать]
     
     
  • 5.76, Crazy Alex, 03:49, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Ну вот для больших проектов это отсутствие тормозов - лишний риск Что до микси... весь текст скрыт [показать]
     
     ....нить скрыта, показать (12)

  • 1.31, Аноним, 03:17, 18/06/2015 [ответить] [смотреть все]  
  • +3 +/
    Новый класс уязвимостей, javascript инъекции ... весь текст скрыт [показать]
     
     
  • 2.39, Аноним, 08:46, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Новый? А XSS разве не javascript injection?
     
  • 1.36, Аноним, 05:46, 18/06/2015 [ответить] [смотреть все]  
  • +4 +/
    Осталось подождать каких-то лет 15-20, что бы у большинства пользователей были б... весь текст скрыт [показать]
     
     
  • 2.40, Аноним, 08:48, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    Вы из какого года Chrome firefox это уже большинство браузеров А до поддержк... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.41, Аноним, 08:59, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Большинство - не все В требованиях любого коммерческого продукта - поддержка IE... весь текст скрыт [показать]
     
     
  • 4.47, й, 12:07, 18/06/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    девятка уже два года даже гуглом не поддерживается восьмёрка -- три года ну, н... весь текст скрыт [показать]
     
     
  • 5.48, й, 12:11, 18/06/2015 [^] [ответить] [смотреть все]  
  • +3 +/
    да и вообще ie 8-9 -- это windows xp, vista и необновлённая семёрка без сервис-п... весь текст скрыт [показать]
     
     
  • 6.54, Аноним, 13:42, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Тем не менее их используют и отключив их поддержку можно нажить себе проблем.
     
     
  • 7.69, fi, 19:10, 18/06/2015 [^] [ответить] [смотреть все]  
  • +1 +/
    Смешной вы человек из каменного века ишака вспомнили Мы делаем так h1 ... весь текст скрыт [показать]
     
  • 5.66, Аноним, 18:54, 18/06/2015 [^] [ответить] [смотреть все]  
  • +/
    За домашних пользователей можно не беспокоиться Но проект над которым мы недавн... весь текст скрыт [показать]
     
     
  • 6.77, Crazy Alex, 03:51, 19/06/2015 [^] [ответить] [смотреть все]  
  • +/
    Ну, значит для специализированных применений новые фичи пока не подойдут Делов-... весь текст скрыт [показать]
     
  • 6.81, й, 13:06, 19/06/2015 [^] [ответить] [смотреть все]  
  • +2 +/
    удачи им при следующем security-аудите с такой полиси они его с треском проваля... весь текст скрыт [показать]
     
  • 2.42, kobezzza, 09:36, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    https://babeljs.io/
     
  • 2.49, Аноним, 12:37, 18/06/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Напишут интерпретатор ECMAScript 6 на ECMAScript 5 сейчас это модно...
     
  • 1.46, Аноним, 11:55, 18/06/2015 [ответить] [смотреть все]  
  • +2 +/
    Фрактал ненужностей продолжает расти.
     
  • 1.56, Аноним, 14:48, 18/06/2015 [ответить] [смотреть все]  
  • +/
    Одно могу сказать - PHP явно не хуже JS/ES6.
     
     
  • 2.88, Кир, 12:13, 09/09/2015 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    В смысле -- одинаково хреновые? Согласен.
     
  • 1.60, lucentcode, 16:27, 18/06/2015 [ответить] [смотреть все]  
  • –1 +/
    Отличная новость. Не знаю как в клиентском js, а для разработчиков под ноду классы, нейспейсы и прочие плюшки очень пригодятся.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:


      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor