Изменения

Перейти к: навигация, поиск

ECMAScript и все-все-все

1814 байтов добавлено, 17:17, 10 октября 2016
м
Нет описания правки
</source>
== <span style="font-family: Consolas; background: #f1dd56; padding: 5px10px 10px 0 10px; font-style: normal">ES6</span> @@ %% ==
Он же ES2015. А также ES2016, ES2017
http://es6-features.org/, https://babeljs.io/repl/
=== Фичи ES6 @@ ===
Уже сказал про:
* for .. of
== Функции, локальные в блоках @@ == (Block-scoped functions) <source lang="javascript">{ function foo () { return 1 } foo() === 1 { function foo () { return 2 } foo() === 2 } foo() === 1}</source> == Вычислимые свойства объектов @@ ===
ES6
</source>
=== Destructuring @@ ===
«Деструктивное присваивание»
// можно в параметрах функции!
[ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ].reduce( function(obj, [ k, v ]) => { obj[k] = v; return obj; }), {});
</source>
=== Оператор распаковки @@ ===
<source lang="javascript">
function f(...args) {}
 
f(...iterable);
</source>
=== Упрощённые названия ключей @@ ===
ES6
</source>
== Итераторы для for .. of @@ == <source lang="javascript">let fibonacci = { [Symbol.iterator]() { let pre = 0, cur = 1; return { next() { [ pre, cur ] = [ cur, pre + cur ]; return { done: false, value: cur }; } }; }}for (let n of fibonacci) { if (n > 1000) break; console.log(n); }</source> == Классы (!) @@ ===
«Наконец-то», скажете вы.
</source>
== super Наследование и property @@ ==
<source lang="javascript">
Нюанс: IE8+, так как при трансляции в ES5 требуют Object.defineProperty().
 
=== Генераторы @@ ===
 
Функции, из которых можно выйти и вернуться. {{mag|Пожалуй, самая крутая из всех доработок!}}
 
<source lang="javascript">
function* a()
{
try
{
var v = yield 1;
if (v < 0) yield 2;
else yield 3;
}
catch (e) { yield "error"; }
return "final";
}
 
var b = a(); // объект GeneratorFunction. функция ещё не начала выполняться
b.next(); // вернёт { value: 1, done: false }
b.next(-5); // передаст -5 внутрь генератора. и вернёт { value: 2, done: false }
b.throw(new Error("x")); // передаст исключение внутрь генератора. и вернёт { value: "error", done: false}
b.next(); // вернёт { value: "final", done: true }
</source>
 
=== Промисы и async/await @@ ===
 
{{red|Уже не ES6, а ES2016-2017, но не суть: в Babel-е всё равно есть}}
 
 
 
=== Template strings @@ ===
 
PHP-подобная строковая интерполяция.
 
<source lang="javascript">
let name = "John";
`Hello, ${name}`;
</source>
 
Кастомная интерполяция (для DSL, видимо):
 
<source lang="javascript">
get`http://example.com/foo?bar=${bar + baz}&quux=${quux}`;
// эквивалентно:
get([ "http://example.com/foo?bar=", "&quux=", "" ], bar + baz, quux);
</source>
 
=== Proxy @@ ===
 
<source lang="javascript">
let target = { foo: "Welcome, foo" };
let proxy = new Proxy(target,
{
get (receiver, name)
{
return name in receiver ? receiver[name] : `Hello, ${name}`;
}
});
proxy.foo === "Welcome, foo";
proxy.world === "Hello, world";
</source>
 
=== Функции, локальные в блоках @@ ===
 
(Block-scoped functions)
 
<source lang="javascript">
{
function foo () { return 1 }
foo() === 1
{
function foo () { return 2 }
foo() === 2
}
foo() === 1
}
</source>
 
=== Итераторы для for .. of @@ ===
 
<source lang="javascript">
let fibonacci = {
[Symbol.iterator]() {
let pre = 0, cur = 1;
return {
next() {
[ pre, cur ] = [ cur, pre + cur ];
return { done: false, value: cur };
}
};
}
}
for (let n of fibonacci) { if (n > 1000) break; console.log(n); }
</source>
[[Категория:VitaliPrivate]]

Навигация