ECMAScript 6 (2015)

ECMAScript 6 также известен как ES6 и ECMAScript 2015.

Некоторые предпочитают называть его JavaScript 6.

В этой главе мы рассмотрим некоторые новые особенности ES6.

  • Ключевое слово let
  • Ключевое слово const
  • Значения параметров по умолчанию
  • Оператор возведения в степень (**) (ECMAScript 2016)
  • Метод Array.find()
  • Метод Array.findIndex()

Ключевое слово let

Ключевое слово let позволяет декларировать переменные внутри области видимости блока, ограниченной фигурными скобками { }.

Так, повторная декларация переменной при помощи ключевого слова var может привести к проблеме:


var x = 10;
// Теперь x равно 10
{ 
    var x = 2;
    // Теперь x равно 2
}
// Теперь x равно 2

Повторная же декларация переменной при помощи ключевого слова let решает эту проблему:


var x = 10;
// Теперь x равно 10
{ 
    let x = 2;
    // Теперь x равно 2
}
// Теперь x равно 10

Ключевое слово const

Ключевое слово const используется для декларации переменной с константным значением.

По действию оно похоже на ключевое слово let, только значение такой переменной нельзя изменять.

Константная переменная во время декларирования должна быть инициализирована.


var x = 10;
// Теперь x равно 10
{ 
    const x = 2;
    // Теперь x равно 2
}
// Теперь x равно 10 

Подробнее о ключевых словах let и const см. главы Ключевое слово let и Ключевое слово const.

Значения параметров по умолчанию

В ES6 можно определять значения по умолчанию для параметров функций.


function myFunction(x, y = 10) {
    // y равна 10 если не передано значение или undefined
    return x + y;
}
myFunction(5); // вернет 15 

Оператор возведения в степень

Оператор возведения в степень (**) возводит первый операнд в степень, заданную вторым операндом:


var x = 5;
var z = x ** 2;          // результат 25

Выражение x ** y дает тот же результат, что использование метода Math.pow(x,y):


var x = 5;
var z = Math.pow(x,2);   // результат 25

Метод Array.find()

Метод find() возвращает значение первого элемента массива, прошедшего заданную проверку в функции обратного вызова.

В следующем примере происходит поиск (и возврат значения) первого элемента, значение которого больше 18:


var numbers = [4, 9, 16, 25, 29];
var first =  numbers.find(myFunction);

function myFunction(value, index, array) {
  return  value > 18;
} 

Функция обратного вызова принимает 3 параметра:

  • Значение элемента (value)
  • Индекс элемента (index)
  • Сам массив (array)

Метод Array.findIndex()

Метод findIndex() возвращает индекс первого элемента массива, прошедшего заданную проверку в функции обратного вызова.

В следующем примере возвращается индекс первого элемента, значение которого больше 18:


var numbers = [4, 9, 16, 25, 29];
var first =  numbers.findIndex(myFunction);

function myFunction(value, index, array) {
   return  value > 18;
} 

Функция обратного вызова принимает 3 параметра:

  • Значение элемента (value)
  • Индекс элемента (index)
  • Сам массив (array)

Новые свойства объекта Number

В ES6 были добавлены новые свойства объекту Number:

  • EPSILON
  • MIN_SAFE_INTEGER
  • MAX_SAFE_INTEGER

var x = Number.EPSILON; 
var y = Number.MIN_SAFE_INTEGER; 
var z = Number.MAX_SAFE_INTEGER; 

Новые методы объекта Number

В ES6 было добавлено 2 новых метода объекту Number:

  • Number.isInteger()
  • Number.isSafeInteger()

Метод Number.isInteger()

Метод Number.isInteger() возвращает true, если его параметр — целое число.


 Number.isInteger(10);        // возвращает true
 Number.isInteger(10.5);      // возвращает false

Метод Number.isSafeInteger()

Безопасное целое число — это число, которое может быть представлено в виде числа двойной точности.

Метод Number.isSafeInteger() возвращает true, если его параметр — безопасное целое число.


 Number.isSafeInteger(10);    // возвращает true
 Number.isSafeInteger(12345678901234567890);  // возвращает false

Безопасными являются все целые числа в диапазоне от (253 - 1) до (253 - 1).
Это число безопасное: 9007199254740991. Это число не безопасное: 9007199254740992.

Новые глобальные методы

В ES6 также было добавлено 2 новых глобальных метода:

  • isFinite()
  • isNan()

Метод isFinite()

Глобальный метод isFinite() возвращает false, если его параметр имеет тип Infinity или NaN. В обратном случае возвращается true:


 isFinite(10/0);       // возвращает false
 isFinite(10/1);       // возвращает true

Метод isNaN()

Глобальный метод isNan() возвращает true, если его параметр имеет тип NaN. В обратном случае возвращается false:


 isNaN("Привет");       // возвращает true

"Стрелочные" функции

"Стрелочные" функции предоставляют короткую запись для выражений-функций.

В выражении-функции больше не нужно использовать ключевые слова function, return и фигурные скобки { }:


// ES5
var x = function(x, y) {
      return x * y;
}

// ES6
const x = (x, y) => x * y;

У стрелочных функций нет своего значения this. И они не подходят для определения методов объектов.

Стрелочные функции должны определяться перед своим использованием. При этом для их декларации использовать ключевое слова const безопаснее ключевого слова var, потому что по своей сути функция это константное значение.

Не писать ключевое слово return и фигурные скобки можно только, если функция состоит из одного выражения.

Хорошей привычкой будет писать их всегда:


const x = (x, y) => { return x * y };