Es6, es8, es2017: что такое ecmascript и чем это отличается от javascript

Шаблон разновидностей

Еще один механизм встроенных конструкторов был расширен в ECMAScript 6:
если метод, такой как , возвращает экземпляр, то какой
конструктор следует использовать для создания этого экземпляра? По умолчанию,
используется тот же конструктор, который создал , но некоторые
наследники могут оставаться прямым экземпляром . ES6 позволяет
классам-наследникам переопределить значение по умолчанию с помощью так
называемого шаблона разновидности:

  • При создании нового экземпляра , методы, такие как
    используют конструктор, хранящийся в .
  • Если конструктор наследника ничего не делает, он наследует
    . Это свойство является геттером, который
    возвращает .

Вы можете изменить настройки по умолчанию, с помощью статического геттера
(строка A):

Альтернативой является использование (вы не можете
использовать присвоение, т.к. вызываете сеттер, который не существует):

Следующие геттеры возвращают , это означает, что такие методы
как , используют конструктор, который создал текущий
экземпляр их результатов.

Возможность #6 — Деструктуризация

  • Документация: Деструктуризация
  • Инструмент: Браузер Firefox 20.0: Меню > Инструменты > Веб-разработка > Веб-консоль

В языках программирования термин «деструктуризация» обозначает соответствие шаблону. В ES6 мы можем сделать некоторые довольно интересные совпадения по шаблону в массивах и объектах, которые ранее бы потребовали от нас действий на один шаг больше. Давайте рассмотрим некоторые из них в веб-консоли Firefox .

Деструктуризация массивов

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

Деструктуризация  также становится полезным сокращением при возвращении нескольких значений из функции, так как нам не нужно больше оббегать весь объект. Кроме того чтобы пропустить некоторые переменные, просто оставьте элемент массива пустым:

Деструктуризация объектов

Благодаря деструктуризации переменные также могут быть инициализированы из объекта, который возвращается из функции даже с вложенными объектами. Кроме того так же, как и с массивами, мы можем пропустить те значения, которые не требуется. Вот фрагмент кода, который это демонстрирует:

О помеченных шаблонах понятно

Ниже я привёл пример ного метода, который работает точно так же, как и поведение по умолчанию. Это поможет лучше понять, что происходит под капотом шаблонных литералов.

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

function normal (template, ...expressions) {
  return template.reduce((accumulator, part, i) => {
    return accumulator + expressions + part
  })
}

Синтаксис — также новинка ES6. Он называется «синтаксисом оставшихся параметров», и фактически кладёт все аргументы, переданные в после , в один массив. Попробуйте нижеприведённый помеченный шаблон, и вы заметите, что получите тот же результат, что и при опущенном .

var name = 'nico'
var outfit = 'пальто'
var text = normal`привет ${name}, ты сегодня выглядишь потрясающе в этом ${outfit}`
console.log(text)
// <- 'привет, nico, ты сегодня выглядишь потрясающе в этом пальто'

Выяснив, как работают помеченные шаблоны, что мы можем с ними делать? Ну, что захотим. Например, можно вывести полученные данные заглавными буквами, придав нашему приветствию более сатирический вид — Я мысленно прочитал результат голосом фокусника Гоба из ситкома «Замедленное развитие», теперь вот сижу и ржу в голос, как псих. Эх, не надо было этого делать.

function upperExpr (template, ...expressions) {
  return template.reduce((accumulator, part, i) => {
    return accumulator + expressions.toUpperCase() + part
  })
}
var name = 'nico'
var outfit = 'пальто'
var text = upperExpr`привет ${name}, ты сегодня выглядишь потрясающе в этом ${outfit}`
console.log(text)
// <- 'привет, NICO, ты сегодня выглядишь потрясающе в этом ПАЛЬТО'

Очевидно, помеченные шаблоны можно использовать не только для приколов над самим собой, но и для чего-то более полезного. По сути, от них можно с ума сойти. Определенно полезным применением было бы автоматически очищать пользовательские данные в ваших шаблонах. Если у нас есть шаблон, в котором все выражения рассматриваются как полученные данные, мы могли бы использовать , чтобы очистить выражения от ненужных тегов HTML.

import insane from 'insane'
function sanitize (template, ...expressions) {
  return template.reduce((accumulator, part, i) => {
    return accumulator + insane(expressions) + part
  })
}
var comment = 'хаха, xss — это так легко< iframe src="https://evil.corp">< /iframe>'
var html = sanitize`< div>${comment}< /div>`
console.log(html)
// < - '< div>хаха, xss — это так легко< /div>'

Теперь не так легко!

Использование методов и свойств строк

Для манипулирования строками в Javascript как и во многих других языках программирования предусмотрена возможность использования методов(объектных функций) , , , …   и свойств , , … . Вызов методов и свойств осуществляется через оператор (точка). Вызов объектных функций может быть осуществлен не однократно, образуя тем самым цепочки методов.

var str = «Text»;
str.italics(); //Преобразование строки в курсив (<i>Text</i>)
//Цепочка методов (каждый метод вызывается из значения, которое возвратил предыдущий метод)
str.toUpperCase().big().bold() // Результат — <b><big>TEXT</big></b>

1
2
3
4

varstr=»Text»;

str.italics();//Преобразование строки в курсив (<i>Text</i>)

//Цепочка методов (каждый метод вызывается из значения, которое возвратил предыдущий метод)

str.toUpperCase().big().bold()// Результат — <b><big>TEXT</big></b>

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

Важно заметить, что вызов метода не переопределяет строку, т.к. работает с ее копией и начальное значение строки остается неизменным

var str = » Random text written «; //удалим пробелы с начала и конца строки
str.trim(); //Результат — «Random text written»
str; //Само значение строки не изменилось — » Random text written »

1
2
3

varstr=» Random text written «;//удалим пробелы с начала и конца строки

str.trim();//Результат — «Random text written»

str;//Само значение строки не изменилось — » Random text written «

Новая область this

Значение определяется тем, каким образом вызвана функция. В JavaScript ключевое слово относится к объекту, к которому оно принадлежит.

Оно имеет разные значения в зависимости от того, где используется:

  • в методе, относится к объекту, по отношению к которому вызван метод;
  • в глобальном контексте выполнения ссылается к глобальному объекту;
  • в функции, значение зависит от того, каким образом вызвана функция;
  • в обычной функции относится к глобальному объекту;
  • в стрелочных функциях, привязан к окружению, в котором была создана функция;
  • в строгом режиме функции, не определен, если предварительно он не был установлен в контексте исполнения;
  • в событии относится к элементу, который получил событие;
  • такие методы, как и могут ссылать на любой объект.

Активные примеры обучения

В этом разделе мы дадим вам попробовать набить руку и вместе напишем код строковой манипуляции. В каждом упражнении ниже у нас есть массив строк и цикл, который обрабатывает каждое значение в массиве и отображает его в маркированном списке. Вам не нужно понимать массивы или циклы прямо сейчас — это будет объяснено в будущих статьях. Все, что вам нужно сделать в каждом случае, — написать код, который выводит строки в том формате, в котором мы предлагаем.

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

В первом упражнении мы начнём с простого: у нас есть множество сообщений поздравительных открыток, но мы хотим отсортировать их, чтобы перечислять только рождественские сообщения. Мы хотим, чтобы вы заполнили условный тест внутри структуры if( … ), чтобы проверить каждую строку и отобразить её в списке, только если это рождественское сообщение.

  1. Сначала подумайте о том, как вы можете проверить, является ли сообщение в каждом случае рождественским сообщением. Какая строка присутствует во всех этих сообщениях и какой метод вы можете использовать для проверки?
  2. Затем вам нужно будет написать условный тест операнд1 оператор операнд2. Соответствует ли результат слева результату справа? Или в этом случае вызов метода слева возвращает результат справа?
  3. Подсказка. В этом случае, вероятно, полезнее проверить, не является ли часть строки не равной (!==) определённому результату.

В этом упражнении у нас есть названия городов в Великобритании, но написанных разным регистром. Мы хотим, чтобы вы изменили их так, чтобы они были в нижнем регистре, за исключением первой буквы. Хороший способ сделать это:

  1. Преобразуйте всю строку, содержащуюся в переменной input, в нижний регистр и сохраните её в новой переменной.
  2. Возьмите первую букву строки в этой новой переменной и сохраните её в другой переменной.
  3. Используя эту последнюю переменную в качестве подстроки, замените первую букву строчной строки первой буквой строчной строки, изменённой на верхний регистр. Сохраните результат этой процедуры замены в другой новой переменной.
  4. Измените значение переменной на равную конечному результату (не ).

Примечание: Подсказка — параметры строковых методов не обязательно должны быть строковыми литералами; они также могут быть переменными или даже переменными с вызываемым ими методом.

В этом последнем упражнении массив содержит кучу строк, содержащих информацию о железнодорожных станциях на севере Англии. Строки представляют собой элементы данных, которые содержат трёхбуквенный код станции, за которым следуют некоторые машиночитаемые данные, за которыми следует точка с запятой, а затем название станции, пригодное для чтения человеком. Например:

MAN675847583748sjt567654;Manchester Piccadilly

Мы хотим извлечь код станции и имя и поместить их в строку со следующей структурой:

MAN: Manchester Piccadilly

Мы бы рекомендовали реализовать это следующим образом:

  1. Извлеките трёхбуквенный код станции и сохраните его в новой переменной.
  2. Найдите номер символьного номера точки с запятой.
  3. Извлеките название для чтения человеком, используя номер индекса точки с запятой в качестве контрольной точки и сохраните его в новой переменной.
  4. Объедините две новые переменные и строковый литерал, чтобы сделать финальную строку.
  5. Измените значение переменной равной конечной строке (не ). 

Строка как объект

По умолчанию в JavaScript строка принимает фиксированные значения, однако с помощью ключевого слова и метода строку можно превратить в объект и определить для неё какие либо свойства.

var stringObject = new string(«This string is object»); //Определение строки как объектный тип данных
stringObject.name = «newString»; //Определение свойства name со значением newString

1
2

varstringObject=newstring(«This string is object»);//Определение строки как объектный тип данных

stringObject.name=»newString»;//Определение свойства name со значением newString

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

Сравнение строк в JavaScript

Строки в JS сравниваются посимвольно в алфавитном порядке.

Особенности посимвольного сравнения строк в JS:

  1. Символы сравниваются по их кодам (больший код — больший символ, все строчные буквы идут после (правее) заглавных, так как их коды больше (‘a’ > ‘Z’  // 97>65 true) ;
  2. Буквы, имеющие диакритические знаки, идут «не по порядку» ( ‘Österreich’ > ‘Zealand’ );

Для получения символа по его коду (и наоборот) используется методы:

  • codePointAt(pos), который возвращает код Unicode для символа, находящегося на позиции pos;
  • charCodeAt(pos), который возвращает числовое значение Unicode UTF-16 для символа по указанному индексу (за исключением кодовых точек Unicode, больших 0x10000).
  • String.fromCodePoint(code) — создаёт символ по его коду code

JavaScript

// одна и та же буква в нижнем и верхнем регистре будет иметь разные коды
alert( «z».codePointAt(0) ); // 122
alert( «Z».codePointAt(0) ); // 90

// Создание символа по его коду code
alert( String.fromCodePoint(90) ); // Z

// Добавление юникодного символа по коду, используя спецсимвол \u
alert( ‘\u005a’ ); // Z

1
2
3
4
5
6
7
8
9

// одна и та же буква в нижнем и верхнем регистре будет иметь разные коды

alert(«z».codePointAt());// 122

alert(«Z».codePointAt());// 90

 
// Создание символа по его коду code

alert(String.fromCodePoint(90));// Z

 
// Добавление юникодного символа по коду, используя спецсимвол \u

alert(‘\u005a’);// Z

Выведем строку, содержащую символы с кодами от 65 до 90 — это латиница (символы заглавных букв):

JavaScript

let str_1 = «»;

for (let i = 65; i <= 90; i++) {
  str_1 += String.fromCodePoint(i);
}
console.log(str_1); // ABCDEFGHIJKLMNOPQRSTUVWXYZ

1
2
3
4
5
6

let str_1 = «»;

for (let i = 65; i <= 90; i++) {

  str_1 += String.fromCodePoint(i);

}

console.log(str_1);// ABCDEFGHIJKLMNOPQRSTUVWXYZ

Правильное сравнение строк (метод str1.localeCompare(str2))

Вызов метода str1.localeCompare(str2) возвращает число, которое показывает, какая строка больше в соответствии с правилами языка:

  • Отрицательное число, если str1 меньше str2.
  • Положительное число, если str1 больше str2.
  • 0, если строки равны.

JavaScript

let str_1 = ‘Alex’.localeCompare(‘NAV’);
console.log(str_1); // -1
let str_2 = ‘Alex’.localeCompare(‘Alex’);
console.log(str_2); // 0

1
2
3
4

let str_1=’Alex’.localeCompare(‘NAV’);

console.log(str_1);// -1

let str_2=’Alex’.localeCompare(‘Alex’);

console.log(str_2);// 0

Свойства строк

Свойство Описание
constructor возвращает функцию-конструктор строки

var str = «Hello world!»;
var result = str.constructor;
//result: function String() { }

1
2
3

varstr=»Hello world!»;

varresult=str.constructor;

//result: function String() { }

length возвращает длину (количество символов) строки

var str = «Hello world!»;
var result = str.length;
//result: 12, т.к. отчет символов, в том числе пробелов, начинается с 0

1
2
3

varstr=»Hello world!»;

varresult=str.length;

//result: 12, т.к. отчет символов, в том числе пробелов, начинается с 0

prototype позволяет добавить свойства и методы к объекту (если строка — объект)

function student(name, surname, faculty) {
this.firstName = name;
this.lastName = surname;
this.faculty = faculty;
}
student.prototype.degree = «Master of Computer Science in Economy»;
var Oleg = new student(«Oleg», «Palshin», «Economic»);
var result = Oleg.degree;
//result: «Master of Computer Science in Economy»

1
2
3
4
5
6
7
8
9

functionstudent(name,surname,faculty){

this.firstName=name;

this.lastName=surname;

this.faculty=faculty;

}

student.prototype.degree=»Master of Computer Science in Economy»;

varOleg=newstudent(«Oleg»,»Palshin»,»Economic»);

varresult=Oleg.degree;

//result: «Master of Computer Science in Economy»

Свойства строки JS

Свойство length (длина строки)

Свойство length содержит длину строки:

JavaScript

const firstName = «Alex»;
const lastName = «NAV»;
let value = firstName + » » + lastName; // ‘Alex NAV’
value = value.length; // 8 (длина строки посимвольно, с пробелами)
alert( `My\n`.length ); // 3 (длина строки посимвольно, с учетом спецсимвола \n)

1
2
3
4
5

constfirstName=»Alex»;

constlastName=»NAV»;

let value=firstName+» «+lastName;// ‘Alex NAV’

value=value.length;// 8 (длина строки посимвольно, с пробелами)

alert(`My\n`.length);// 3 (длина строки посимвольно, с учетом спецсимвола \n)

Так как length— это числовое свойство, а не функция, то добавлять скобки не нужно.

Конкатенация строк в JavaScript

Конкатенация (объединение) строк в JS возможно двумя способами:

  1. с использованием оператора «+»;
  2. с использованием метода concat.

JavaScript

const firstName = «Alex»;
const lastName = «NAV»;
const age = 30;

let value;

value = firstName + » » + lastName; // Alex NAV (конкатенация бинарным «+»)
value += » My age » + age; // Alex NAV My age 30 (конкатенация бинарным «+»)

value = lastName.concat(» «, firstName); // NAV Alex (конкатенация методом concat)

1
2
3
4
5
6
7
8
9
10

constfirstName=»Alex»;

constlastName=»NAV»;

constage=30;

let value;

value=firstName+» «+lastName;// Alex NAV (конкатенация бинарным «+»)

value+=» My age «+age;// Alex NAV My age 30 (конкатенация бинарным «+»)

value=lastName.concat(» «,firstName);// NAV Alex (конкатенация методом concat)

Доступ к символам

Продемонстрируем, как получить доступ к символам и индексам строки How are you?

"How are you?";

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

"How are you?";

Вывод

r

Мы также можем использовать метод charAt(), чтобы вернуть символ, передавая индекс в качестве параметра.

"Howareyou?".charAt(5);

Вывод

r

Также можно использовать indexOf(), чтобы вернуть индекс первого вхождения символа в строке.

"How are you?".indexOf("o");

Вывод

1

Несмотря на то, что символ «o» появляется в строке How are you? дважды, indexOf() вернёт позицию первого вхождения.

lastIndexOf() используется, чтобы найти последнее вхождение.

"How are you?".lastIndexOf("o");

Вывод

9

Оба метода также можно использовать для поиска нескольких символов в строке. Они вернут индекс первого символа.

"How are you?".indexOf("are");

Вывод

4

А вот метод slice() вернёт символы между двумя индексами.

"How are you?".slice(8, 11);

Вывод

you

Обратите внимание на то, что 11– это ?, но? не входит в результирующую строку. slice() вернёт всё, что между указанными значениями индекса

Если второй параметр опускается, slice() вернёт всё, начиная от первого параметра до конца строки.

"How are you?".slice(8);

Вывод

you?

Методы charAt() и slice() помогут получить строковые значения на основании индекса. А indexOf() и lastIndexOf() делают противоположное, возвращая индексы на основании переданной им строки.

Сила слов

Слова очень важны для людей — это основа нашего общения. Интернет представляет собой преимущественно текстовую среду, предназначенную для того что бы люди общались и делились информацией, поэтому нам полезно иметь контроль над словами, которые появляются в нем. HTML предоставляет визуальную и смысловую структуру для нашего текста, CSS позволяет нам стилизовать его, а JavaScript содержит ряд функций для управления строками, создания пользовательских приветственных сообщений, при необходимости отображая нужные текстовые метки, сортируя элементы в желаемом порядке и многое другое.

Практически во всех программах, которые мы показали вам на данный момент,  были задействованы некоторые манипуляции со строками.

Строки

Методы

К прототипу была добавлена пара удобных методов. Большинство из них служат просто устранения обходных путей с методом для получения того же результата:

Просто, но эффективно. Другой удобный метод был добавлен для создания повторяющейся строки:

Шаблонные литералы

Шаблонные литералы обеспечивают чистый способ для создания строк и интерполяции выражений. Возможно, вы уже знакомы с синтаксисом; он основан на знаке доллара и фигурных скобках . Шаблонные литералы заключаются в обратные кавычки. Краткий пример:

Как видно из кода выше, шаблонные литералы просто удобны для конкатенации по сравнению с ES5. Однако шаблонные литералы также можно использовать и для многострочных литералов. Имейте в виду, что пробельные символы (например, символ новой строки) являются частью строки:

Структуры и типы данных

Последний стандарт ECMAScript определяет семь типов данных:

  • Шесть типов данных,  которые являются примитивами:
    • Boolean.  и .
    • null. Специальное ключевое слово, обозначающее нулевое или «пустое» значение. Поскольку JavaScript чувствителен к регистру, не то же самое, что , или любой другой вариант.
    • undefined. Свойство глобального объекта; переменная, не имеющая присвоенного значения, обладает типом .
    • Number.  или .
    • String. «Howdy».
    • Symbol (ECMAScript 6)
  • и Object

Хотя типов данных относительно немного, но они позволяют вам выполнять полезные функции в ваших приложениях.  и  являются другими фундаментальными элементами языка. Вы можете думать об объектах как об именованных контейнерах для значений и о функциях как о процедурах, которые ваше приложение может исполнять.

JavaScript — это динамически типизированный язык. Это означает, что вам не нужно указывать тип данных переменной, когда вы её объявляете, типы данных преобразуются автоматически по мере необходимости во время выполнения скрипта. Так, например, вы можете определить переменную следующим образом:

А позже вы можете присвоить этой переменной строковое значение, например:

Поскольку JavaScript является динамически типизированным, это присваивание не вызовет сообщения об ошибке.

В выражениях, включающих числовые и строковые значения с оператором , JavaScript преобразует числовые значения в строковые. Например:

В выражениях с другими операторами JavaScript не преобразует числовые значения в строковые. Например:

В том случае, если значение, представляющее число, хранится в памяти как строка, можно использовать методы для преобразования строк в числа:

преобразует строку в целочисленное значение. Хорошей практикой является всегда указывать основание системы счисления (параметр ).

Альтернативным способом для получения числа из строки является использование оператора «унарный плюс»:

Примитивные строковые типы и String Objects

Для начала мы проясним различие между двумя типами строк. JavaScript различает примитивную строку (неизменяемый тип) и объект String.

Чтобы понять различия между ними, инициализируем примитивную строку и объект-строку.

// Инициализируемпримитивнуюстроку
const stringPrimitive = "A new string.";

// ИнициализируемString Objects
const stringObject = newString("A new string.");  

Можно использовать оператор typeof, чтобы определить тип значения. В первом примере мы присвоили переменной строковое значение.

typeof stringPrimitive;

Вывод

string

Во втором примере мы использовали конструктор new String(), чтобы создать объект-строку и присвоить его переменной.

typeof stringObject;

Вывод

object

В большинстве случаев вы будете создавать примитивные строки. JavaScript может использовать свойства и методы объекта String без явного приведения примитивной строки к object.

Методы и свойства String Objects доступны для всех строк. Но JavaScript осуществляет конвертацию строки в объект и обратно каждый раз, когда вызывается метод или свойство.

Строки — основы

С первого взгляда строки обрабатываются аналогично числам, но если копнуть глубже, вы увидите некоторые заметные отличия. Давайте начнём с ввода некоторых основных строк в консоль разработчика, чтобы познакомиться с ними.

  1. Для начала введите следующие строки:
  2. Как и в случае с числами, мы объявляем переменную, инициализируя её строковым значением, а затем возвращаем значение. Единственное различие здесь в том, что при написании строки вам нужно окружить значение кавычками. 
  3. Если вы не сделаете этого или пропустите одну из кавычек, вы получите сообщение об ошибке. Попробуйте ввести следующие строки:

    Эти строки не работают, потому что любая текстовая строка без кавычек считается именем переменной, именем свойства, зарезервированным словом или чем-то подобным. Если браузер не может найти его, возникает ошибка (например, «missing, before statement»). Если браузер может видеть, где начинается строка, но не может найти конец строки, как указано во 2-й строке, она жалуется на ошибку (с «unterminated string literal»). Если ваша программа выявляет такие ошибки, вернитесь назад и проверьте все свои строки, чтобы убедиться, что у вас нет пропущенных кавычек.

  4. Следующий код будет выполнен только в том случае, если ранее была объявлена переменная  — убедитесь сами:

    В настоящее время строка  имеет то же значение, что и строка .

  1. В JavaScript вы можете выбрать одинарные кавычки или двойные кавычки, чтобы обернуть ваши строки. Оба варианта будут работать нормально:
  2. Существует очень мало различий между одиночными и двойными кавычками, и решение какие из них использовать в коде остаётся на ваше усмотрение. Однако вы должны выбрать один вариант и придерживаться его, иначе ваш код может выдать ошибку, особенно если вы используете разные кавычки в одной строке! Ниже приведён пример:
  3. Браузер будет считать, что строка не была закрыта, потому что в строке может появиться другой тип цитаты, который вы не используете, чтобы хранить ваши строки в переменных. Из примера можно понять, о чем идёт речь (в коде ошибок нет):
  4. Однако вы не можете включить один и тот же знак кавычки внутри строки, если он используется для их хранения. Ниже приведена ошибка, браузер ошибочно определяет место, где строка кончается:

    Что приводит нас к следующей теме.

Чтобы исправить нашу предыдущую строку кода, нам нужно дать понять браузеру, что кавычка в середине строки не является меткой её конца. Экранирование символов означает, что мы делаем что-то с ними, чтобы убедиться, что они распознаются как текст, а не часть кода. В JavaScript мы делаем это, помещая обратную косую черту непосредственно перед символом. Введите эти строки:

Так лучше. Таким же образом можно экранировать и другие символы, например . Кроме того существуют специальные коды. Для дополнительной информации см. .

Возможность #4 — Параметры функции по умолчанию

  • Документация:
  • Инструмент: TypeScript 0.8.3

С параметрами функции по умолчанию мы можем всегда иметь некоторые значения для параметров функции, установив их по умолчанию. Синтаксис этой возможности в ES6 интуитивно понятен. Значения параметров по умолчанию задаются при определении функции. Давайте посмотрим на ES6 синтаксис в новом файле TypeScript с расширением .

Затем установим TypeScript как модуль npm и выполним файл и скомпилируем его в простой JavaScript. Вот команды для установки и компиляции из командной строки:

Команда выше создаст файл JavaScript с именем , который можно выполнить из HTML файла. Вот простой HTML файл, который вызывает внешний JavaScript файл, созданный компилятором TypeScript:

Наконец мы открываем HTML-файл в Chrome/Firefox и вызываем функцию два раза: с параметрами и без

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

Проверьте и другие возможности TypeScript, включая или просмотрите обучающий материал по TypeScript для более глубокого изучения.

Деструктурирование

Деструктурирование обеспечивает удобный способ для извлечения данных из объектов или массивов. Для начала, хороший пример может быть показан на массиве:

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

Деструктурирование также работает и с объектами. Убедитесь в наличии соответствующих ключей:

Также вы можете использовать этот механизм, чтобы изменить имена переменных:

Еще один интересный образец имитации нескольких возвращаемых значений:

Деструктурирование может быть использовано, чтобы задать значения по умолчанию для объектов аргументов. С литералом объекта вы можете имитировать именованные параметры.

Классы

Традиционно JavaScript — единственный основной язык с наследованием на основе прототипов. ES2015 представил классы, которые являются просто синтаксическим сахаром для внутренней работы, что сильно изменил то, как мы строим программы на JavaScript.

Теперь наследование очень простое и напоминает другие языки объектно-ориентированного программирования:

Классы не имеют явных объявлений переменных класса, но ты должен инициализировать любую переменную в конструкторе.

Конструктор

Классы имеют специальный метод с именем , который вызывается, когда класс инициализируются с помощью . Родительский наследуется автоматически, если у потомка нет своего метода . Если же потомок имеет свой , то, чтобы унаследовать конструктор родителя нужно использовать с аргументами для родителя.

Getters and setters

Геттеры могут быть объявлены как:

связывает свойство объекта с функцией, которая вызывается при обращении к этому свойству.

Сеттеры пишутся так же:

связывает свойство объекта с функцией, он будет вызываться при попытке установить это свойство.

JS Учебник

JS ГлавнаяJS ВведениеJS Где установить?JS ВыводJS ЗаявленияJS СинтаксисJS КомментарииJS ПеременныеJS LetJS ConstJS ОператорыJS АрифметикаJS ПрисваиванияJS Типы данныхJS ФункцииJS ОбъектыJS СобытияJS СтрокиJS Методы строкJS ЧислаJS Методы чиселJS МассивыJS Методы массиваJS Сортировка массиваJS Итерация массиваJS Объекты датJS Формат датJS Метод получения датJS Метод набора датJS Математические…JS Случайные числаJS БулевыJS Сравнение…JS Заявления if…elseJS Заявление switchJS Цикл forJS Цикл whileJS Заявление break…JS Преобразование…JS Битовые…JS Регулярные выраженияJS ОшибкиJS ОбластьJS ПодъемныйJS СтрогийJS Ключевое слово thisJS Ключевое слово letJS КонстантыJS Функция стрелкиJS КлассыJS ОтладчикJS Руководство стиляJS ПрактикаJS Распространенные ошибкиJS ЭффективностьJS Зарезервированные словаJS ВерсииJS Версия ES5JS Версия ES6JS Версия 2016JS Версия 2017JS JSON

Перевод других типов данных в строку

Для того чтобы перевести в строку такие типы данных как (целое число), (массив), (логический тип), а также другие типы, нужно всего лишь сложить значение любого типа с пустой строкой.

//Перевод целого числа в строку
var num = 454; //В переменной num хранится число — 454
num = num + «»; //Переопределение num, теперь в ней хранится строка — «454»
//Перевод массива в строку
var arr = ; //В arr сейчас хранится массив Array
arr
+= «»; //После переопределения arr содержит строку «one, two, three»

1
2
3
4
5
6

//Перевод целого числа в строку

varnum=454;//В переменной num хранится число — 454

num=num+»»;//Переопределение num, теперь в ней хранится строка — «454»

//Перевод массива в строку

vararr=’one’,’two’,’three’;//В arr сейчас хранится массив Array

arr+=»»;//После переопределения arr содержит строку «one, two, three»

Заключение

При использовании транспилятора весь ваш код эффективно «заключается» в ES5, пока браузеры будут продолжать добавлять новые возможности. Таким образом, даже если браузер полностью поддерживает определенную возможность ES6, ES5-совместимая версия, которая будет использоваться, возможно будет хуже по производительности. Вы можете рассчитывать на то, что любая возможность ES6, и в конечном счете все из них, будут поддерживаться в определенном месте (в браузерах и средах, которые вам необходимо поддерживать на тот момент). Но до тех пор мы должны выборочно отключать возможности ES6 от транспиляции в ES5, чтобы предотвратить излишнюю нагрузку. Имея это в виду, решите для себя, подходит ли данный момент, чтобы начать использовать ES6 (какие-либо его части).

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: