Автор оригинала: FreeCodeCamp Community Member.
Мария Дминского
Добро пожаловать в часть III Учить ES6 Допусший путь , серия, созданная, чтобы помочь вам легко понять ES6 (Ecmascript 6)!
Давайте дальше приключения в ES6 и охватить три супер ценных концепции:
- Шаблонные литералы
- Распространение операторов
- Генераторы
Шаблонные литералы
Преимущества:
- Легкое выражение интерполяции и вызовы методов! Смотрите примеры ниже.
- В том числе сложная информация в формате, которую вы хотите, просто!
- Вам не нужно беспокоиться о нескольких кавычках, нескольких линиях, пространствах или использовании «+» знак! Только две задние тикины распознают всю информацию внутри них! Woohoo!
Остерегаться:
- Обычно называются «шаблонные струны», так как это было их имя в предыдущих изданиях спецификации ES2015/ES6.
- Переменные и параметры должны быть оберткой в долларовом знаке и фигурных скобках, т. Е. Зажигатель $ {Пример}.
- Знак плюс, «+», внутри шаблона литерала буквально выступает в качестве математической операции, а не конкатенацией, если также внутри $ {}. См. Примеры ниже для дальнейшего объяснения.
Мигрировать на шаблон буквальный синтаксис
После просмотра преимуществ и предметов, которые необходимо знать, обратите внимание на следующие примеры и изучите тонкие различия с использованием шаблонных литералов:
// #1
// Before:
function sayHi(petSquirrelName) { console.log('Greetings ' + petSquirrelName + '!'); }
sayHi('Brigadier Sir Nutkins II'); // => Greetings Brigadier Sir Nutkins II!
// After:
function sayHi(petSquirrelName) { console.log(`Greetings ${petSquirrelName}!`); }
sayHi('Brigadier Sir Nutkins II'); // => Greetings Brigadier Sir Nutkins II!
// #2
// Before:
console.log('first text string \n' + 'second text string');
// => first text string
// => second text string
// After:
console.log(`first text string
second text string`);
// => first text string
// => second text string
// #3
// Before:
var num1 = 5;
var num2 = 10;
console.log('She is ' + (num1 + num2) + ' years old and\nnot ' + (2 * num1 + num2) + '.');
// => She is 15 years old and
// => not 20.
// After:
var num1 = 5;
var num2 = 10;
console.log(`She is ${num1 + num2} years old and\nnot ${2 * num1 + num2}.`);
// => She is 15 years old and
// => not 20.
// #4
// Before:
var num1 = 12;
var num2 = 8;
console.log('The number of JS MVC frameworks is ' + (2 * (num1 + num2)) + ' and not ' + (10 * (num1 + num2)) + '.');
//=> The number of JS frameworks is 40 and not 200.
// After:
var num1 = 12;
var num2 = 8;
console.log(`The number of JS MVC frameworks is ${2 * (num1 + num2)} and not ${10 * (num1 + num2)}.`);
//=> The number of JS frameworks is 40 and not 200.
// #5
// The ${} works fine with any kind of expression, including method calls:
// Before:
var registeredOffender = {name: 'Bunny BurgerKins'};
console.log((registeredOffender.name.toUpperCase()) + ' you have been arrested for the possession of illegal carrot bits!');
// => BUNNY BURGERKINS you have been arrested for the possession of illegal carrot bits!
// After:
var registeredOffender = {name: 'Bunny BurgerKins'};
console.log(`${registeredOffender.name.toUpperCase()} you have been arrested for the possession of illegal carrot bits!`);
// => BUNNY BURGERKINS you have been arrested for the possession of illegal carrot bits!Давайте оформием заказ еще более сложный способ использования шаблонных литералов! Посмотрите, как легко включить всю эту информацию, не беспокоясь обо всех знаках «+», пробелы, математической логики и размещение цитаты! Это может быть Итак, удобный! Также обратите внимание, вам нужно будет включить еще один знак доллара, за пределами заполнителя, если распечатать цены:
function bunnyBailMoneyReceipt(bunnyName, bailoutCash) {
var bunnyTip = 100;
console.log(
`
Greetings ${bunnyName.toUpperCase()}, you have been bailed out!
Total: $${bailoutCash}
Tip: $${bunnyTip}
------------
Grand Total: $${bailoutCash + bunnyTip}
We hope you a pleasant carrot nip-free day!
`
);
}
bunnyBailMoneyReceipt('Bunny Burgerkins', 200);
// Enter the above code into your console to get this result:
/*
Greetings BUNNY BURGERKINS, you have been bailed out!
Total: $200
Tip: $100
------------
Grand Total: $300
We hope you a pleasant carrot nip-free day!
*/Вау, намного проще !! Это так захватывающе … Ааа !!
Распространение операторов
Если у вас есть несколько аргументов в массиве, который вы хотите вставить в функциональный вызов, или несколько массивов и/или элементы массива, которые вы хотите легко вставить в другой массив, используйте разные операторы!
Преимущества:
- Легко соглашайте массивы внутри других массивов.
- Поместите массивы, где вы хотите внутри этого массива.
- Легко добавлять аргументы в функцию вызова.
- Всего 3 точка … ‘Перед именем массива.
- Похоже на функция .apply Но можно использовать с Новый ключевое слово, пока функция .apply не мочь.
Давайте посмотрим на ситуацию, когда мы хотели бы добавить несколько массивов в другой главный массив без использования оператора распространения:
var squirrelNames = ['Lady Nutkins', 'Squirrely McSquirrel', 'Sergeant Squirrelbottom']; var bunnyNames = ['Lady FluffButt', 'Brigadier Giant']; var animalNames = ['Lady Butt', squirrelNames, 'Juicy Biscuiteer', bunnyNames]; animalNames; // => ['Lady Butt', ['Lady Nutkins', 'Squirrely McSquirrel', 'Sergeant Squirrelbottom'], 'Juicy Biscuiteer', ['Lady FluffButt', 'Brigadier Giant']] // To flatten this array we need another step: var flattened = [].concat.apply([], animalNames); flattened; // => ['Lady Butt', 'Lady Nutkins', 'Squirrely McSquirrel', 'Sergeant Squirrelbottom', 'Juicy Biscuiteer', 'Lady FluffButt', 'Brigadier Giant']
С оператором распространения ваши массивы автоматически вставляются и объединяются везде, где вы хотите. Нет необходимости в дополнительных шагах:
var squirrelNames = ['Lady Nutkins', 'Squirrely McSquirrel', 'Sergeant Squirrelbottom']; var bunnyNames = ['Lady FluffButt', 'Brigadier Giant']; var animalNames = ['Lady Butt', ...squirrelNames, 'Juicy Biscuiteer', ...bunnyNames]; animalNames; // => ['Lady Butt', 'Lady Nutkins', 'Squirrely McSquirrel', 'Sergeant Squirrelbottom', 'Juicy Biscuiteer', 'Lady FluffButt', 'Brigadier Giant']
Еще один полезный пример:
var values = [25, 50, 75, 100]
// This:
console.log(Math.max(25, 50, 75, 100)); // => 100
// Is the same as this:
console.log(Math.max(...values)); // => 100
/*
NOTE: Math.max() typically does not work for arrays unless you write it like:
Math.max.apply(null, values), but with Spread Operators you can just insert it
and voila! No need for the .apply() part! Wohoo! :)
*/Потенциально более полезный, чем .apply ()
Что если у вас есть несколько аргументов для размещения внутри функции? Вы можете использовать хороший OL ‘ Функция .prototype.apply :
function myFunction(x, y, z) {
console.log(x + y + z)
};
var args = [0, 1, 2];
myFunction.apply(null, args);
// => 3Или используйте оператор распространения:
function myFunction(x, y, z) {
console.log(x + y + z);
}
var args = [0, 1, 2];
myFunction(...args);
// => 3В ES5 невозможно сочинить Новый Ключевое слово с Применить метод. С момента введения синтаксиса оператора распространения вы можете теперь!
var dateFields = readDateFields(database); var d = new Date(…dateFields);
Генераторы
Преимущества:
- Позволяет приостановить функции для возобновления позже.
- Легче создавать асинхронные функции.
- Используется общепринятым с Setimeout () или SetInterval () время асинхронные события.
Знать:
- Вы знаете, что вы смотрите на генератор, если хотите * и слово урожай .
- Вам необходимо позвонить в функцию каждый раз, чтобы следующая функция внутри называется, в противном случае она не будет работать, если только это в пределах SetInterval () Отказ
- Результат, естественно, выходит в форме объекта, добавить. ценность получить только ценность.
- Объект поставляется с сделано Недвижимость, которая установлена на false до всех доходность выражения напечатаны.
- Генераторы конца либо, когда все функции/значения были вызваны или если A Возвращение заявление присутствует.
Пример:
function* callMe() {
yield '1';
yield '…and a 2';
yield '…and a 3';
return;
yield 'this won't print';
}
var anAction = callMe();
console.log(anAction.next());
//=> { value: '1', done: false }
console.log(anAction.next());
//=> { value: '…and a 2', done: false }
console.log(anAction.next());
//=> { value: '…and a 3', done: false }
console.log(anAction.next());
//=> { value: 'undefined', done: true }
console.log(anAction.next());
//=> { value: 'undefined', done: true }
// NOTE: To get only the value use anAction.next().value otherwise the entire object will be printed.
Генераторы являются супер полезными, когда речь идет о вызовах асинхронных функций. Допустим, у вас есть 3 разных функция, которые вы хранили в массиве, и вы хотите позвонить каждому за другим после определенного количества времени:
// Bunny needs to go grocery shopping for her friend's birthday party.
var groceries = '';
// Let's create three functions that need to be called for Bunny.
var buyCarrots = function () {
groceries += 'carrots';
}
var buyGrass = function () {
groceries += ', grass';
}
var buyApples = function () {
groceries += ', and apples';
}
// Bunny is in a hurry so you have to buy the groceries within certain amount of time!
// This is an example of when you would use a timer with a Generator.
// First store the functions within an array:
var buyGroceries = [buyCarrots, buyGrass, buyApples];
// Then loop through the array within a Generator:
// There are some issues doing this with the forEach, recreate this using a for loop.
function* loopThrough(arr) {
for(var i=0; i Bunny bought carrots!
// after 1 second: => Bunny bought carrots, grass!
// after 1 second: => Bunny bought carrots, grass, and apples!
// after 1 second: => Thank you! Bunny bought all the carrots, grass, and apples in time thanks to your help!
Это может быть достигнуто через Обещание (операция, которая еще не завершена, но ожидается в будущем). Разработчики иногда используют обещания и генераторы вместе в их коде, поэтому хорошо, чтобы быть в курсе обоих.
Поздравляю! Вы сделали это через Учить ES6 Допусший путь Часть III. И теперь вы приобрели три супер ценных концепции! Теперь вы можете безопасно освежить и сделать эффективное использование шаблонных литералов, распространяющихся операторами и генераторами в вашем коде. Woohoo! Иди тебе!
Хотя, вы можете подождать, так как есть еще вопросы браузера с ES6 И важно использовать компиляторы, такие как Бабел или модуль Bundler, как WebPack. Перед публикацией вашего кода. Все это будет обсуждаться в будущих изданиях Учить ES6 Допочью! Спасибо за чтение ❤.
Держите свою мудрость обновляемую, понравив и следуя больше Учить ES6 Допусший путь скоро на среднем!
Часть I: const, давай
Часть II: (стрелка) = > Функции и «это» ключевое слово
Часть III: Шаблонные литералы, Распределительные операторы и генераторы!
Часть IV: параметры по умолчанию, деструктурное назначение и новый метод ES6!
Часть V: Классы, транспилинг ES6 код и больше ресурсов!
Вы также можете найти меня на Github ❤ https://github.com/Mashadim
Оригинал: “https://www.freecodecamp.org/news/learn-es6-the-dope-way-part-iii-template-literals-spread-operators-generators-592765337294/”