На собрании Генеральной Ассамблеи ECMA (http://www.ecma-international.org/) официально утверждён (https://www.ecma-international.org/news/index.html#Docs113thGA) стандарт ECMAScript 2017 (http://www.ecma-international.org/ecma-262/8.0/index.html) (ECMAScript 8 или "ECMA-262 8th edition"), определяющий базовые функциональные возможности JavaScript. ECMAScript 8 был подготовлен в соответствии с представленным (https://www.opennet.me/opennews/art.shtml?num=44355) в прошлом году непрерывным процессом формирования стандартов ECMAScript, которые теперь выпускаются ежегодно и развиваются в рамках непрерывно обновляемого варианта спецификации ECMAScript Next (http://kangax.github.io/compat-table/esnext/).
В ECMAScript 8 вошли изменения, связанные с устранением недоработок и внесением уточнений к прошлым выпускам ECMAScript, а также добавлено несколько новшеств (https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_...). В стандарт перенесены уже поддерживаемые браузерами возможности, поэтому ECMAScript 8 сразу доступен во всех основных браузерах и не требует дополнительного времени на реализацию.
Основные новшества (https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_...):
- Добавлены методы Object.values() и Object.entries() (https://github.com/tc39/proposal-object-values-entries), который дополняют уже стандартизированный метод Object.keys и позволяют получить массив из значений или связок ключ/значение для хранящихся в объекте перечисляемых данных (позволяет раскрыть содержимое ассоциативного массива без перебора в "for in");- Добавлены методы String.padStart() и String.padEnd() (https://github.com/tc39/proposal-string-pad-start-end), позволяющие организовать вывод строк с заполнением, например, выровнять консольный вывод или отображать числа с сохранением фиксированного размера путём добавления повторяющегося шаблона заполнения в начало или конец строки. Например, 'abc'.padEnd(10, "foo") выдаст "abcfoofoof", а 'abc'.padEnd(6,"123465") выдаст "abc123";
- Добавлен метод Object.getOwnPropertyDescriptors() (https://github.com/ljharb/proposal-object-getownpropertydesc...), который возвращает все описания свойств, определённых непосредственно в объекте и не наследованных из других объектов (например, позволяет узнать установлены ли свойства value, set, get, writable, enumerable и т.п.);
- Включена (https://github.com/tc39/ecmascript-asyncawait) поддержка деклараций функций async (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...) ("async function"), возвращающих объект AsyncFunction, а также оператора await (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...), которые позволяют упростить написание кода, выполняемого в асинхронном режиме, не блокируя основной поток команд. Конструкции с async/await значительно проще для восприятия и более читаемы, по сравнению с аналогичными конструкциями на основе механизма Promise;
- Разрешено (https://github.com/tc39/proposal-trailing-function-commas) оставлять запятые после последнего элемента в массивах и объектах (например, "var arr = [1, 2, 3,];"). В массивах также можно оставлять незаполненные элементы (например, "var arr = [1, 2, 3,,,];") вместо которых останутся пустые значения;- Добавлен (https://github.com/tc39/ecmascript_sharedmem) тип SharedArrayBuffer (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...), позволяющий создавать массивы в разделяемой памяти. Для обеспечения возможности писать и читать данные одновременно из нескольких потоков предложен глобальный объект Atomics (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...), который позволяет организовать выполнение атомарных операций с данными в разделяемой памяти, включая средства синхронизации блокировок примитивов.
URL: https://hackernoon.com/es8-was-released-and-here-are-its-mai...
Новость: http://www.opennet.me/opennews/art.shtml?num=46839
String.padStart() и String.padEnd()... джва года ждал, спасибо
годнота
> String.padStart() и String.padEnd()... джва года ждал, спасибо
> годнота
Ура! Теперь джва года ждем sprintf.
> Ура! Теперь джва года ждем sprintf.String.padLeft() же.
Вместо sprintf`this an string and this an ${val}` - возвращает обычную строку.
У тебя настолько кривые руки, что понадобилось выравнивание?
> У тебя настолько кривые руки, что понадобилось выравнивание?Какой мудрый коммент. Фсе ф шоке.
man left-pad@npm
pad’ы легко прикручивались полифиллом. А вот async/await, будучи только синтаксическим сахаром над промисами, проясняет код и облегчает жизнь очень сильно. Правда, теперь я наблюдаю, как они расползаются по моим скриптам и подозреваю, что в конце концов все методы станут асинхронными (кроме конструкторов, с которыми так делать нельзя).
ну норм
Ура, товарищи!
И что неужели никто не скажет какой javascript плохой и все вокруг идиоты?
>неужели никто не скажет какой javascript плохойА то что небо голубое тебе не сообщить? Или что вода мокрая?
Середина лета, Капитан Очевидность отдыхает на пляже, давайте не будем дёргать его по таким пустякам.
хелоуворлдщики на хаскеле любят поспать ввиду бессонных ночей за дотаном и КСочкой
Обезьянки все такие мазохисты? Если в теме не унижают их любимый язык, то день не задался? Обычно программисты пьют кофе для заряда, а обезьянке нужно прочесть пару десятков оскорбительных комментов про яваскрипт, чтобы она могла продолжить овнокодить?
хелоуворлд, чем тебе js не угодил?
> хелоуворлд, чем тебе js не угодил?А ссылочку на ядро, окружение или браузер на JS можно? А еще, состоятельность ЯП проверяется обычно компилятором или интерпретатором на нем самом - и тут вас, Бандерлогов, запросто обстваляют те же почитатели Каа.
Но вы и дальше продолжайте дружно повторять, что вы велики и достойны восхищения :)
> А ссылочку на ядро, окружение или браузер на JS можно?Как насчёт виртуальной машины на JS?
https://www.youtube.com/watch?v=2gu6bdKDjoE
> Как насчёт виртуальной машины на JS?
> https://www.youtube.com/watch?v=2gu6bdKDjoEКак насчет того, что мне и оригинал знаком, не только пересьемка на видосик? Поэтому я в курсе лютейших тормозов этой ВМки.
Мы, если что, не о пет-проектах и PoCах :)
Так вот как крутость языка измеряется. А я то думал эффективностью и простотой построения сложных конструкций.
Мб кинете ссылочку на удобную реализацию асинхрона на си?
man fork
> Так вот как крутость языка измеряется. А я то думал эффективностью и
> простотой построения сложных конструкций.Крутость языка измеряется не хелловорлдами (тут вы проигрываете тем же хацкелям или лиспам и идете максимум наравне с питонам) или обещаниями пиарщиков , а тем, что на нем смогли такого нужного и большого написать.
Я правда не подумал, что для ЖопоСкритников ядро, браузер или хотя бы более-менее быстрый интерпретатор суть простые и тривиальные конструкции :(
Хелоуворлд не читатель?
>простотой построения сложных конструкций
> Хелоуворлд не читатель?
>>простотой построения сложных конструкцийЧто ты не осилил в
>> простотой построения сложных конструкций.
> Крутость языка измеряется не хелловорлдами (тут вы проигрываете тем же хацкелям или лиспам и идете максимум наравне с питонам)
> а тем, что на нем смогли такого нужного и большого написать.?
> Хелоуворлд не читатель?
>>простотой построения сложных конструкцийКстати, примеры простоты и эффективности построения сложных конструкций будут? Чтоб мы могли посме^W проникнуться.
я по пятницам не подаю
> я по пятницам не подаюЧто вы там по пятницам делаете, нас как-то не очень интригует.
А вот почему вы по средам и четвергам любите покудахтать «ЖС фсех рвет! Да, это суперский ЯП! Мы все так говорим, а значит это правда!» уже интереснее.
мое мнение о js за комментом 3.12
У вас, хеловорлдов, паранойя. Кудахтаете как раз больше всех вы.
> мое мнение о js за комментом 3.12А че сюда лезете? Неужто тут банановым сиропом намазанно? Мы сдесь не о красоте, а о "крютости".
Не можете привести пример большого приложения (или простоту конструкции того, что у вас там выступает в качестве меры мощности, см. ветку обсуждения) - значит кудахчете без толку.> У вас, хеловорлдов, паранойя. Кудахтаете как раз больше всех вы.
> Яваскрипт ужасный язык. Но знают об этом только те, кто на нем пишет.
> Ну и хелоуворлдщики на бейсике, конечно же.Эпично. И правда, такая стройная картина мира: кроме JS есть только бейсик, а все, кто не разрабатывает на JS - helloworld-щики!
>А че сюда лезете?Охренеть.
>Не можете привести пример большого приложенияХеловорлд, js - внезапно, скриптовый язык, у него своя ниша, какое большое приложение ты хочешь на скриптовом языке?
не говорю, что все, кто не разрабатывает на js - хеловорлдщики. Имею дело с разными языками. В качестве хобби - вообще OCaml.
Хеловорлдщики - они вроде таких, как ты - "не знаю, но осуждаю".
> Охренеть.Что, сложно удержать в голове, что разные ветки дискуссий действительно РАЗНЫЕ и не у всех есть либастрал, чтобы угадать, кто и что где-то там отписал?
> Хеловорлд, js - внезапно, скриптовый язык, у него своя ниша, какое большое приложение ты хочешь на скриптовом языке?Внезапно, ты или тебе подобные дали другое определение - что-то там с построением сложностей. Но и тут примеров пока не было, только самовосхваления и битье себя в грудь бананом "мы все так говорим, а значит это правда!"
> Хеловорлдщики - они вроде таких, как ты - "не знаю, но осуждаю".
Только вот вряд ли мы знакомы, иначе бы ты знал, что был в моей жизни и такой темный и бесславный период, когда приходилось ковыряться в этом ЖС-ном ***ме.
А значит, ты меня не знаешь, но … самокритично, в общем.
>приходилось ковыряться в этом ЖС-ном ***метак и скажи - не осилил, и не выноси мозг своей околесицей.
>>приходилось ковыряться в этом ЖС-ном ***ме
> так и скажи - не осилил,Ну ты прям гигант мысли и логики!
> и не выноси мозг своей околесицей.Да не верещи, не отбираю я твой банан. Зачем он мне?
А я не буду отбирать твой кассовый аппарат. На этом и закончим. Мир.
Яваскрипт - прекраснейший язык. И красота его не только в нововведениях типа:> Разрешено оставлять запятые после последнего элемента в массивах и объектах (например, "var arr = [1, 2, 3,];"). В массивах также можно оставлять незаполненные элементы (например, "var arr = [1, 2, 3,,,];") вместо которых останутся пустые значения;
Яваскрипт ужасный язык. Но знают об этом только те, кто на нем пишет. Ну и хелоуворлдщики на бейсике, конечно же.
я хочу объявить массив из 4-х элементов, последний из которых пустой и напишу:
var arr = [1, 2, 3,];я хочу объявить массив из 3-х элементов, но лень удалять последнюю запятую, напишу:
var arr = [1, 2, 3,];и в чём тут красота? бред полнейший.
я хочу объявить массив из 4-х элементов, последний из которых пустой и напишу:
var arr = [1, 2, 3,,];
я хочу объявить массив из 3-х элементов, но лень удалять последнюю запятую, напишу:
var arr = [1, 2, 3,];поправил, не благодари helloword-anykey.
Ну не красиво же!
А как известно: "Некрасивые самолёты и летают плохо!" (С) приписывают Туполеву.
*показывает листок с от руки написанным "Сарказм"*
Что значит пустой. Такое разве есть в JS?var arr = [1, 2, 3, undefined];
var arr = [1, 2, 3, null];
var arr = [1, 2, 3, ''];
Открой консоль и проверь.
У него будет не пустой, а разрежённый. Это не тоже самое, что undefined в ячейке.
> Что значит пустой. Такое разве есть в JS?
> var arr = [1, 2, 3, undefined];
> var arr = [1, 2, 3, null];
> var arr = [1, 2, 3, ''];Массивы в жс фальшивые. На самом деле это хеши.
Попробую объяснить. Создание, заполнение массива на лету и инициализация массива это разные вещи. Одно дело, когда вы знаете, что у вас в массиве и поэтому инициализируете его с заданным количеством элементов, другое дело когда формируете массив на лету.Вам ничто не мешает написать:
var arr = new Array(5) //создаст массив из 5 пустых элементов
для инициализации массива этого достаточно. Оператор [] актуален, когда, например, в цикле формируется динамическй массив.
var temp_arr = [];for ( var i = 0; i < Math.floor( Math.random() * 1000 ); i++)
{
temp_arr.push(i);
}Разница между new Array() и [] существенна только в контексте использования. Ну и инициализация массива с заданным количество элементов невозможна в [].
>создаст массив из 5 пустых элементовСоздаст разряженный массив (а не пустой). Учите уже матчасть. Тот же Array.foreach не будет его перебирать.
Во-первых, я-то матчасть, в отличии от вас, знаю на должном уровне. Если бы это был разряжённый массив, то я так и написал бы.Во-вторых, читайте уже стандарт ECMA Script.
https://learn.javascript.ru/array#new-array-2
https://developer.mozilla.org/ru/docs/Web/JavaScript/Referen...
http://www.ecma-international.org/ecma-262/8.0/index.html#se...
http://es5.javascript.ru/x15.4.html#x15.4.2
new Array(3).forEach(function (a) { console.log(a); });
Что мы увидим в консоле? Ничего. Массив то разряженный.
----------------------------------------------------------------------
new Array(3).fill(1).forEach(function (a) { console.log(a); });
Что мы увидим в консоле? Три вывода в консоль числа 1.
----------------------------------------------------------------------
[,,].forEach(function (a) { console.log(a); });
Что мы увидим в консоле? Ничего. Массив то разряженный.
----------------------------------------------------------------------
[,,].fill(2).forEach(function (a) { console.log(a); });
Что мы увидим в консоле? Три вывода в консоль числа 2.
----------------------------------------------------------------------В общем, иди учить матчасть, хотя по ссылка, что ты сам же дал. Там все есть.
Прежде чем мне тыкать, сходи сам для начала хотя бы на википедию:https://en.wikipedia.org/wiki/Sparse_matrix
>In numerical analysis and computer science, a sparse matrix or sparse array is a matrix in which most of the elements are zero. By contrast, if most of the elements are nonzero, then the matrix is considered dense.
>Разрежённый масси́в — абстрактное представление обычного массива, в котором данные представлены не непрерывно, а фрагментарно; большинство элементов его принимают одно и то же значение (значение по умолчанию, обычно 0 или null).**************************************
Sparse array в JS это массив с holes
var sparse = [,,3] //sparse array
var dense = [undefined, undefined, 3] //dense arraysparse === dense //false
0 in sparse //false
sparse[0] === 0 //false
0 in dense //true
**************************************
var sparse = [];
var dense = new Array();sparse === dense //false
foreach их не перебирает, но при явном обращении
console.log( new Array(3)[0])
будет
undefinedВ общем-то это можно отнести к граблям JS. Zpsr dct ,jkmit cnfyjdbncz 'pjnthbtcrbv/
Как раз отличный пример обратного. Приняли бы одно ("запятая всегда означает присутствующий в массиве элемент со значением null") или второе ("дублирующиеся запятые игнорируются") - было бы ок. А так - какова будет длина массива "var arr = [1, 2, 3,];" и как это соотнесётся с длиной массива "var arr = [1, 2, 3,,];" ? Лично я ни одного констистентного решения не вижу.
http://es5.javascript.ru/x11.html#x11.1.4Элементы массива могут быть пропущены в начале, в середине или в конце списка элементов. Если перед запятой в списке элементов отсутствует AssignmentExpression Выражение присваивания – т. е., запятая находится сразу в начале списка или непосредственно перед другой запятой – то пропущенный элемент массива увеличивает длину Array и индекс последующих элементов. Определение пропущенных элементов массива не производится. Элемент, пропущенный в конце массива, не увеличивает длину объекта Array.
Сам JS - это наверное самое адекватное из всего стека веб-технологий.
Хм, скорее "наименее неадекватное". Учитывая, что весь стек совершенно чудовищен - не самое большое достижение.
Получается веб не адекватен, а JS да...
Адекватность предполагает соответствие чему-либо, поэтому "самых адекватных" должно быть как минимум два. Правда адекватны они будут только друг другу...
Для данного случая - имеется в виду адекватность задачам, я полагаю. Сейчас веб - это в основном платформа для запуска приложений (от простых, которые мы по старой памяти обзываем страничками до всяких наворотов вроде графических редакторов и групвари). Этой задаче там действительно условно адекватен JS (тем менее адекватен, чем сложнее приложение), с остальным - всё хуже, дикая смесь легаси и попыток это легаси подправить.
Это понятно, тут не поспоришь. Проблема в подходе. Для веб, где JS условно является условно стандартообразующим монополистом, он не может быт не адекватным в принципе. Отдельные решения, отдельные элементы языка - это да можно дискутировать. Это сродни обсуждению адекватен ли ассемблер какой-то машины или нет. Есть машина, есть её оп.коды и есть ассемблер. Можно дискутировать о мнемоническом представлении какой-то команды, но не о ассемблере как таковом. Соответственно текущий JS применительно к веб не может быть хорошим, плохим или неадекватным.
Проблема возникает, когда кто-то называет JS хорошим, потому что он адекватен для веб. Он не хороший вообще, он просто соответствует текущему подходу в веб. Будет он адекватен для чего-то еще - это вопрос. Хороший ли это язык для систем, где есть возможность выбора - это еще больший вопрос.
>Он не хороший вообще, он просто соответствует текущему подходу в веб.Проблема в том, что он не соответствует текущему подходу в веб. Да и вообще весь веб-стек не соответствует текущему подходу в веб.
Верно. Все давно пришут на ClojureScript или PureScript.
Все - это ты и два твоих воображаемых друга? Удачи дальше так думать.
ситуация отражает то насколько всем пофиг
> Разрешено оставлять запятые после последнего элемента в массивах и объектах (например, "var arr = [1, 2, 3,];"). В массивах также можно оставлять незаполненные элементы (например, "var arr = [1, 2, 3,,,];") вместо которых останутся пустые значения;Ссылка вообще про про запятые после аргументов функции, поправьте.
Отлично! Лет через 5 можно будет использовать на сайте!
webpack не завезли? async\await уже давно юзаю
Да уже простые Простые форматы вымирают как мамонты. Везде компиляция: js, css, xls ... =(
Это в уютненьких корпоративных проектах везде сборка, наверное. На аутсорсинговых просторах еще ни один проект в адекватном состоянии не пришел.Вчера шок-контент был, когда увидел js, в шапке которого скопипастен минифицированный jquery, bootstrap и еще каких-то мелких библиотек, а внизу уже непосредственно код. js-сниппеты, с кодом, спрятанным в таймауте, чтоб jquery к этому моменту загрузился, несколько версий jquery на одной странице - это вообще в порядке вещей.
Так и живем. Лучше бы js родился компилируемым. Глядишь, такой х*рни бы не было. С бинарным кодом в копипасту не поиграешь.
JS начинает быть похож на Java курильщика
JS был укуренным от рождения :) Как только сделали динамический язык и кинули туда недотёп-ойтишнегов, тут *оно* по кочкам и понеслось! Их унюханые братья из стана PHP были только рады новым членам палаты.
И зачем это нужно? Отключил у себя и доволен.
Так ведь свистелки теперь не свистят, а перделки не пердят. Как так жить?
> Так ведь свистелки теперь не свистят, а перделки не пердят. Как так жить?Без лишних шумов и запахов.
> Без лишних шумов и запахов.:))) Шутки-шутками, но ведь есть реальные утырки-недоадмины-въебмастера, сайты которых вообще не работают бес крипта!! Реально за такое надо ломать ноги (оттуда же у них растут и руки).
web без скрипта!? это как!? а rich ui я тебе на чем сделаю? а разделение ui и бекенд? что обратно в 2000е? ты ебанутый?
типичная макака, даже без оскорблений высказаться не могет :)
> И зачем это нужно? Отключил у себя и доволен.Только у особо одаренных половину контента -- как корова языком слизала:
https://abissell.com/2014/01/16/c11s-_generic-keyword-macro-.../
Без ЖС тут не просто код "неподсвеченный" и "неинтерактивный" (хотя зачем каждый раз посетителю рендерить подсветку и прочее, если все это один раз можно сделать при загрузке контента - для меня тайна) -- его, млять, вообще нет.
Да это ещё вполне адекватный сайт, а вот тут:
https://tyumen.zarplata.ru/vacancy/card/132987921/Imitator_p... - даже title без js не увидишь, не то что контент хоть какой-то ))
> - Разрешено (https://github.com/tc39/proposal-trailing-function-commas) оставлять
> запятые после последнего элемента в массивах и объектах (например, "var arr
> = [1, 2, 3,];"). В массивах также можно оставлять незаполненные элементы
> (например, "var arr = [1, 2, 3,,,];") вместо которых останутся пустые
> значения;В общем-то переводить надо аккуратней, НО самое смешное, что народ принялся бурно обсуждать, как будто это новая фича , то, что написано было уже внедрено с ES5.
А по линку, то что новое приняли, это "Trailing commas in function parameter lists", т.е. можно ставить запятую после последнего параметра в фунцкии, аля f(a,) тоже что и f(a).
Осталось только чтобы Флэнаган выпустил очередное издание своей книги, и, конечно же, что бы Симфол+ её перевёл и выпустил.
C массивами и запятыми вопрос все же не ясен. Что за фигня вообще?async/await - самая полезная штука из этого
Так а что не ясно то, это не новая фича. Они добавили только trailing commas для параметров функции, пример: f(a,).
А в массивах и объектах уже было давно это внедрено. Одну запятую в конце списка массива или объекта можно использовать, "для облегчения" добавления новых элементов ;)
К примеру:
const a = [1,2,3,] ; a.length; // размер масива 3, тоже что и a[1,2,3]
//
const obj = { a: 'one', b: 'two', c: 'three",} ;
//
Ну и если запятых в конце несколько, то это тоже самое что создать undefined элементы.
К примеру:
const a = [1,2,3,,,] ; a.length // размер массива будет 5, где пустые элементы образуют дыру, они неявно undefined. Но любые итераторы над массивом пропустят пустые элементы, т.е. не выведут что они undefined.
Хоть один юзкейс бы...
Представь, что массив состоит не из коротких чисел и записывается в одну строку, а из сложных элементов, каждый из которых на отдельной строке, а то и вовсе является блоком из десятка строк. И в процессе разработки элементы этого массива надо будет добавлять, удалять, менять местами. В этом случае каждый раз следить за добавлением/удалением запятой весьма напрягает.
Основное применение этому, это git и подобное.
Когда элементы объекта/массива находятся в разных строках и, к примеру, ты добавляешь новую строку с новым элементом, тебе нужно поставить запятую в предыдущей строке за последним элементом. И это уходит как 2 строки исправления в гит, вместо одной когда используешь trailing commas.
Логично. Спасибо
Что-то как-то негусто. Запятые какие-то, нафиг они нужны? И так нормально живётся. В общем, фичи какие-то такие, что и без этого нормально жили.
Лучше бы вместо этих методов, которые легко реализовать самим, сделали нормальную защиту "классов" вместо бубна в виде Object.freeze()
запятые вообще зачем? вон в Clojure нет их и норм.
Clojure большинство хомячков не осилят. Синтаксис другой.Все мои знакомые и друзья видят синтаксис, боятся его, и тут же закрывают книги, статьи и прочее по Clojure и продолжают писать на JS, Java, Python, Go, сейчас еще Rust.
Функциональные языки после императивных тяжело даются. Императивщина головного мозга трудно лечится )
Javascript как-бы мультипарадигмальный, может быть и процедурный и ооп и функциональный ;) В последний год все больше и больше народа переходят на функциональный стиль написания.
А про без запятых, так js тоже может =D , const arr = '1 2 3 4 5'.split(' ');
Ха-ха, приколол )Насчет моды на функциональное - согласен. Только это тупая мода без понимания откуда все это берется.
А все это новое уже было в LISP лет 60 назад... )
> Ха-ха, приколол )
> Насчет моды на функциональное - согласен. Только это тупая мода без понимания
> откуда все это берется.
> А все это новое уже было в LISP лет 60 назад... )И следующим этапом по-идее этим людям, кто в функциональном стиле пишет - перейти на что-то вроде ClojureScript, ан-нет )