История самообучения cmdlhz № 1, 2019 г.

Серия [История самообучения cmdlhz, 2019 г.]

[JavaScript]
  🌱 Net Ninja - JavaScript ES6
  🌱 Net Ninja - Asynchronous JavaScript
  🌱 Net Ninja - Object Oriented JavaScript
  🌱 Coding Train - JavaScript ES6-ES8 (Part1, Part2)
[Regular Expressions]
  🌱 Coding Train - Programming with Text
[Vue]
  🌱 Net Ninja - Vue CLI3
  🌱 Net Ninja - Vue JS2
  🌱 Net Ninja - Vuex
  🌱 Net Ninja - Vuetify (Part1, Part2, Part3)
[Python/Django]
  🌱 Net Ninja - Python3
  🌱 Net Ninja - Django
[Figma]
  🌱 Design Course
  🌱 Figma (Part1, Part2, Part3, Part4, Part5)
[Illustrator]
  🌱 TastyTuts (Part1, Part2, Part3)
[SQL]
  🌱 freeCodeCamp

🌱 Это мой краткий обзор JavaScript ES6 Tutorial от Net Ninja на YouTube.

[1. Intro]
[2. Let]
[3. Default Parameters]
[4. Spread Operator]
[5. Template Strings]
[6. Object Literal Enhancements]
[7. New String Methods]
[8. Arrow Functions]
[9. Sets]
[10. Generators]

[ 1. Константы ]

ES2015 представил два важных новых ключевых слова JavaScript: let и const.

Переменные, определенные с помощью const, ведут себя как переменные let, за исключением того, что их нельзя переназначить.

const pi = 3.142;
function calcArea(r){
  const pi = 10;
  console.log("The area is " + pi + r*r + ".");
}
console.log(pi);
calcArea(5);

=› Это печатается следующим образом:

>>> 3.142
>>> The area is 250.

В первом ответе используется глобальная версия const, а во втором — локальная версия const.

[ 2. Пусть ]

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

var x = 10;
if(x > 5){
  let x = 5;
  console.log("inside: " + x);
}
console.log("outside " + x);

=› Это печатается следующим образом:

>>> inside: 5
>>> outside: 10

[ 3. Параметры по умолчанию ]

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

function logInfo(name="Jen", nationality="Korea"){
  console.log("My name is " + name + " and I'm from " + nationality + ".");
}
logInfo();
logInfo("Kate", "China");

=› Это печатается следующим образом:

>>> My name is Jen and I'm from Korea.
>>> My name is Kate and I'm from China.

[ 4. Оператор спреда ]

Оператор распространения позволяет iterable распространяться или расширяться индивидуально внутри receiver. Итерируемые объекты — это все, что можно зациклить, например строки, массивы и наборы. (Брэндон Морелли)

function sum(x, y, z) {
  return x + y + z;
}
const numbers = [1, 2, 3];
sum(numbers);
sum(...numbers);

=› Это печатается следующим образом:

>>> 1,2,3undefinedundefined
>>> 6

Брэндон Морелли приводит больше примеров в своем блоге:

🌱 ПРИМЕР 1

const string = 'CODEBURST'; 
const characters = [ ...string ];
console.log(characters);

=› Это печатается следующим образом:

>>> ["C", "O", "D", "E", "B", "U", "R", "S", "T"]

🌱 ПРИМЕР 2

const items = ['This', 'is', 'a', 'sentence'];
console.log(items);
console.log(...items); 

=› Это печатается следующим образом:

>>> ["This", "is", "a", "sentence"]
>>> This is a sentence

[ 5. Строки шаблона ]

Шаблонные литералы — это строковые литералы, допускающие встроенные выражения. С ними можно использовать многострочные строки и функции интерполяции строк. (МДН)

function introName(name, nationality){
  console.log("My name is " + name + " and I'm from " + nationality + ".");
}
introName("Jen", "Korea");
function introName_copy(name, nationality){
  console.log(`My name is ${name} and I'm from ${nationality}.`);
}
introName_copy("Jen", "Korea");

=› Это печатается следующим образом:

>>> My name is Jen and I'm from Korea.
>>> My name is Jen and I'm from Korea.

[ 6. Улучшения литерала объекта ]

🌱 ДО

let name = "Jen";
let sentence = {
  name: name,
  guitar: function(x){
    console.log(`I played a guitar for ${x} minutes.`);
  }
};
console.log(sentence.name);
console.log(sentence.guitar(5));

=› Это печатается следующим образом:

>>> Jen
>>> I played a guitar for 5 minutes.
>>> Undefined

🌱 ПОСЛЕ

let name = "Jen";
let sentence = {
  name,
  guitar(x){
    console.log(`I played a guitar for ${x} minutes.`);
  }
};
console.log(sentence.name);
console.log(sentence.guitar(5));

=› Это печатается следующим образом:

>>> Jen
>>> I played a guitar for 5 minutes.
>>> Undefined

[ 7. Новые строковые методы ]

🌱 ПОВТОРИТЬ

let greetings = "hello ";
console.log(greetings.repeat(5));

=› Это печатается следующим образом:

>>> "hello hello hello hello hello"

🌱 НАЧАЛО

let greetings = "goodbye";
console.log(greetings.startsWith("bye"));
console.log(greetings.startsWith("bye", 4));
console.log(greetings.startsWith("bye", greetings.length - 3));

=› Это печатается следующим образом:

>>> false
>>> true
>>> true

🌱 КОНЕЦ

let greetings = "goodbye";
console.log(greetings.endsWith("bye"));

=› Это печатается следующим образом:

>>> true

🌱 ВКЛЮЧАЕТ

let greetings = "My name is Jen.";
console.log(greetings.includes("name"));

=› Это печатается следующим образом:

>>> true

[ 8. Функции стрелок ]

🌱 ДО ES6

let greetings = function(name){
  console.log(`Hello, ${name}!`);
}
greetings("Jen");

=› Это печатается следующим образом:

>>> Hello, Jen!

🌱 ES6

let greetings = name => console.log(`Hello, ${name}!`);
greetings("Jen");

=› Это печатается следующим образом:

>>> Hello, Jen!

🌱 ДО ES6 (без указания «это»)

let sentence = {
  name: "Jen",
  greetings(x){
    window.setInterval(function(){
      if(x > 0){
        console.log(this.name + " loves traveling.");
        x--;
      }, 1000);
    }
};
sentence.greetings(3);

=› Это печатается следующим образом:

>>>  loves traveling.
>>>  loves traveling.
>>>  loves traveling.

🌱 ДО ES6 (с объявлением «это»)

let sentence = {
  name: "Jen",
  greetings(x){
    let _THIS = this;
    window.setInterval(function(){
      if(x > 0){
        console.log(_THIS.name + " loves traveling.");
        x--;
      }, 1000);
    }
};
sentence.greetings(3);

=› Это печатается следующим образом:

>>> Jen loves traveling.
>>> Jen loves traveling.
>>> Jen loves traveling.

🌱 ES6

let sentence = {
  name: "Jen",
  greetings(x){
    window.setInterval(() => {
      if(x > 0){
        console.log(this.name + " loves traveling.");
        x--;
      }, 1000);
    }
};
sentence.greetings(3);

=› Это печатается следующим образом:

>>> Jen loves traveling.
>>> Jen loves traveling.
>>> Jen loves traveling.

[ 9. Наборы ]

Объект Set позволяет хранить уникальные значения любого типа, будь то «примитивные значения или ссылки на объекты». (МДН)

🌱 ПРИМЕР 1

let colors = new Set();
colors.add("blue").add("red").add("yellow");
console.log(colors.has("black");
console.log(colors.delete("red");
console.log(colors.size);
console.log(colors);
colors.clear();
console.log(colors.size);
console.log(colors);

=› Это печатается следующим образом:

>>> false
>>> true
>>> 2
>>> Set {"blue", "yellow"}
>>> 0
>>> Set {}

🌱 ПРИМЕР 2

let colors = ["red", "red", "blue", "blue", "yellow"];
let refined_colors = new Set(colors);
console.log(refined_colors);
colors = [...refined_colors];
console.log(colors);

=› Это печатается следующим образом:

>>> Set {"red", "blue", "yellow"}
>>> ["red", "blue", "yellow"]

[ 10. Генераторы ]

🌱 ПРИМЕР 1

function* gen(){
  let x = yield "red";
  let y = yield "blue";
  let z = yield "yellow";
  return x + y + z;
}
let myGen = gen();
console.log(myGen.next());
console.log(myGen.next(10));
console.log(myGen.next(5));
console.log(myGen.next(2));

=› Это печатается следующим образом:

>>> Object {value: "red", done: false}
>>> Object {value: "blue", done: false}
>>> Object {value: "yellow", done: false}
>>> Object {value: 17, done: true}

🌱 ПРИМЕР 2. Отображение асинхронного кода синхронизированным способом.

genWrapper(function* generator(){
  var twitter = yield $.getJSON("data/twitter.json");
  console.log(red);
  var youtube = yield $.getJSON("data/youtube.json");
  console.log(red);
  var fb = yield $.getJSON("data/fb.json");
  console.log(red);
});
function genWrapper(generator){
  // set up generator / iterator
  let myGen = generator();
// create function to handle the yielded value
  function handle(yielded){
    if(!yielded.done){
      yielded.value.then(function(data){
        return handle(myGen.next(data));
      });
    }
  } // end handle
  
  // return handle function, passing in myGen.next
  return handle(myGen.next());
}

=› Это печатается следующим образом:

>>> [Object, Object, Object, Object]
>>> [Object, Object, Object, Object]
>>> [Object, Object, Object]

(Отправлять твиты, видео на YouTube и комментарии в Facebook по порядку.)

🌱 ПРИМЕР 3. Передача аргументов методу next(). Автор Раджеш Бабу.

Как мы все знаем, функции в JavaScript«выполняются до возврата/конца. Генераторные функции, с другой стороны, "выполняются до тех пор, пока не будет yield/return/end". (Раджеш Бабу)

function *generatorFunction(i){
  console.log(i);
  const j = 5 * (yield (i*10));
  console.log(j);
    
  const k = yield(2*j/4);
  console.log(k);
  
  return (i + j + k);
}

  • генераторФункция(7)
❗️ i = 7;
  • .next(33) ➡️ значение: 70
function *generatorFunction(i){
  console.log(i);
  const j = 5 * (yield (i*10));
}
🔹 No previous yield expression : value 33 is discarded.
🔹 i = 7;
❗️yield value: 7(i) * 10 = 70
  • .next(25) ➡️ значение: 62,5
function *generatorFunction(i){
  console.log(i);
  const j = 5 * (yield (i*10));
  console.log(j);
    
  const k = yield(2*j/4);
  console.log(k);
  
  return (i + j + k);
}
🔹 yield(i*10) is replaced with 25.
🔹 const j = 5 * 25 = 125;
❗️yield value: 2 * 125(j) / 4 = 62.5
  • .next(8) ➡️ значение: 65
function *generatorFunction(i){
  console.log(i);
  const j = 5 * (yield (i*10));
  console.log(j);
    
  const k = yield(2*j/4);
  console.log(k);
  
  return (i + j + k);
}
🔹 Replaces the entire second yield with 8, bringing the value of k to 8.
❗️yield value: 7(i) + 125(j) + 8(k) = 140


Спасибо за чтение! 🎵 Если вам понравилась эта запись в блоге, похлопайте👏