Чекайте, що? Але ж нещодавно Node Foundation анонсувало пяту версію і вже час знов оновлюватися? Так, цей реліз Node покращує потужність, надійність, зручність користування та безпеку.
Кому потрібно оновлюватися?
Користувачам версій 0.12
, 0.14
, 5.*
. Так як версія 4.0
є LTS (long-time support), то її оновлювати не обов'язково, так як її підтримка буде ще до квітня 2017 року.
Покращення потужності
Найголовнішим є те, що Node тепер використовує останню версію рушія V8
.
Також покращили швидкість завантаження модулів. Ми не проводили ніяких тестів, але Node Foundation кажуть, що завантаження модулів тепер відбувається в 4 рази швидше.
Згідно з node green, Node 6.0 підтримує 93% можливостей ES6 (Ecmascript 6).
Важливі зміни
Buffer
-
З'явився новий Buffer API, де зменшений ризик багів та вразливостей, що могли потрапити в додаток.
-
Поточний
Buffer
таSlowBuffer
API оголошені застарілими. -
Новий метод
lastIndexOf
було додано до прототипуBuffer
Та інше.
Нові можливості ES6
В новий реліз було додано нові фічі з ES6, що значно поліпшують та полегшують процес розробки.
Параметри за умовчуванням
Це було довгоочікуване нововведення в Node.js. До цього розробники були змушені писати так:
function functionWithDefaultValue(val) {
val = val || {};
}
Тепер можна ось так:
function functionWithDefaultValue(val = {}) {
}
Розпакування аргументів
Цей новий оператор дозволяє передавати в функцію кожен елемент масиву як окремий параметр. До цього писали якось так:
function myFunc(x, y, z) {
}
var args = [0, 1, 2];
myFunc.apply(null, args);
Тепер можна ось так:
function myFunc(x, y, z) {
}
var args = [0, 1, 2];
myFunc(...args);
Залишкові параметри
Якщо ми хочемо написати на JS варіативну функцію нам потрібно було працювати з arguments
, тепер же ми можемо для цього використовувати оператор ...
.
До:
function variadic() {
console.log(arguments);
}
variadic(1, 22, 12, 13);
variadic('adfsd', {}, [1, 12]);
Після:
function variadic(...args) {
console.log(args);
}
variadic(1, 22, 12, 13);
variadic('adfsd', {}, [1, 12]);
"А яка різниця?" — спитаєте ви? Різниця в тому, що arguments
зберігає всі параметри, передані функції, а з новим оператором ви можете спочатку вказати декілька іменованих аргументів, а потім решту.
function argumentsDemo() {
console.log(arguments);
}
argumentsDemo(2, 2, 24, 2, 4, 4, 2); // logs 2, 2, 24, 2, 4, 4, 2
function spreadDemo(a, b, ...spread) {
console.log(a, b);
console.log(spread);
}
// після перших двох ми можемо передати скільки завгодно параметрів
spreadDemo(1, 3, '24', 'lorem');
// виведе
// 1 3
// 24, lorem
Розпакування масивів
Ця фіча дозволяє присвоювати значення певних елементів масиву прямо в змінні.
var x = [1, 2, 3, 4, 5]
var [y, z] = x
console.log(y) // 1
console.log(z) // 2
Також таким чином можна поміняти значення змінних:
var a = 1;
var b = 3;
[a, b] = [b, a];
console.log(a); // 3
console.log(b); // 1
Більше тут.
Проксі
Проксі (Proxy) - це об'єкти, що змінюють стандартну поведінку фундаментальних операцій (отримання/встановлення властивості, перерахування, виклик функції). (Щось схоже на магічні методи в Python - прим. пер.)
В цьому прикладі число 37 буде повертатися, якщо потрібної властивості немає в об'єкті. Це реалізується встановленням обробника get
:
var handler = {
get: function(target, name){
return name in target ? target[name] : 37;
}
};
var p = new Proxy({}, handler);
p.a = 1;
p.b = undefined;
console.log(p.a, p.b); // 1, undefined
console.log('c' in p, p.c); // false, 37
Детальніше тут.
Reflect
Якщо ви писали на Java, PHP або чомусь такому, то ви, напевно, знайомі з рефлексією. Reflect - це рефлексія в javascript/node. Як пише MDN:
Reflect - вбудований об'єкт, що дає доступ до методів, що реалізують рефлексію
Символи
Символи (Symbols) — це унікальні та незмінні структури. Їх можна використовувати для ідентифікації об'єктів. Символи ніколи не дорівнюють один одному:
Symbol('scotch') !== Symbol('scotch');
Ця стаття детальніше розкриває тему символів.
Коли мені потрібно оновитися?
На момент написання статті (травень 2016) Node.js 6.0 була ще досить нестабільною, але вже в жовтні вона повинна стати LTS
Ще немає коментарів