Рынок труда для инженеров-программистов очень конкурентен, и получение работы может зависеть от того, насколько хорошо вы пройдёте собеседование. В этой серии статей Справочник по собеседованию для инженера-программиста мы предоставим некоторые полезные знания, которые помогут вам подготовиться к следующему собеседованию по разработке программного обеспечения. В сегодняшней статье мы рассмотрим JavaScript ES6. Давай начнем!
Пусть/Конст
В ES6, также известном как ECMAScript 2015, let и const заменяют var для объявления переменных. позволитьблокировать область видимости, пока const остается неизменным.
вар
function varTest() { var a = 30; if (true) { var a = 50; console.log(a); } console.log(a); } varTest(); // 50 50 for (var i = 0; i < 5; i++) { console.log(i); // 1, 2, 3, 4 } console.log(i); // 5
позволить
function testLet() { let a = 30; if (true) { let a = 50; console.log(a); } console.log(a); } testLet(); // 50 30 for (let i = 0; i < 5; i++) { console.log(i); // 1, 2, 3, 4 } console.log(i); // undefined
константа
const только запрещает присвоение нового значения константе, но не предотвращает изменение свойств объекта.
const pi = 3.142; pi = 1; // TypeError: Assignment to constant variable. const person = { name: "Bob", }; person.name = "Andy"; console.log(person.name); // Andy. Doesn't prevent mutation.
Классы
class Person { // Called during instantiation. constructor(fullName, emailAddress, pass) { (this.fullName = fullName), (this.emailAddress = emailAddress), (this.pass = pass); } // Callable without instantiation. static countPerson() { console.log("There are 100 people"); } // Regular method. signUp() { console.log(this.fullName + " signed up."); } } // Instantiation. let john = new Person("John Doe", "[email protected]", "5678"); john.signUp(); // John Doe signed up. Person.countPerson(); // There are 100 people.
Наследование
class Subscriber extends Person { constructor(fullName, emailAddress, pass, subscription) { super(fullName, emailAddress, pass); this.subscription = subscription; } getSubscription() { console.log(this.fullName + " uses the " + this.subscription + " subscription."); } } let jane = new Subscriber("Jane Doe", "[email protected]", "5678", "premium"); jane.getSubscription(); // Jane Doe uses the premium subscription. jane.signUp(); // Jane Doe signed up.
Литералы шаблонов
Обратные кавычки позволяют использовать многострочные строки. Кроме того, мы можем внедрять переменные и функции с помощью ${ var }
.
До
var name = "Bob"; var template = "<h1>Hello, " + name + "</h1>" + "<p>This is a simple template.</p>";
После
let name = "Bob"; let template = `<h1>Hello, ${name}</h1> <p>This is a simple template.</p>`; // With backticks
Струны
let string = "Hello, I love Javascript."; string.startsWith("Hello"); // true string.endsWith("Javascript"); // false, since there is no dot. string.includes("love"); // true
Числа
Number.isNaN("cat"); // true Number.isInteger(1); // true
Набор
Набор представляет собой компиляцию отдельных элементов. Если вводится список с повторяющимися значениями, будет возвращен объект множества, состоящий из уникальных значений. Слабый набор, с другой стороны, содержит только уникальные объекты.
var array = [1, 2, 3, 3]; var set = new Set(array); // {1, 2, 3} // Set methods set.size; // 3 set.add("cat"); // [1, 2, 3, "cat"] set.delete(2); // [1, 3, "cat"] // Convert to array var array = Array.from(set); // [1, 2, 3] var array2 = [...set]; // [1, 2, 3]
Стрелочные функции
function hello(name) { return "Hello" + name; } console.log(hello("Bob")); // Hello Bob // As long as no curly braces are used after the fat arrow, the return is implicit. var hello = (name) => "Hello " + name; console.log(hello("Bob")); // Hello Bob
Стрелочные функции наследуют this
вместо перепривязки. Это обеспечивает более лаконичный синтаксис, а также лексическую привязку this
, устраняя необходимость в that
или self
. В стрелочных функциях и arguments
, и this
относятся к контексту внешней функции.
Ранее каждая вновь определенная функция имела собственное значение this
. Однако стрелочные функции не имеют собственных this
; вместо этого они используют значение this
окружающей среды.
const obj = { data: "Bob", getData() { console.log(this.data); }, getData2: () => { console.log(this.data); }, }; obj.getData(); // Bob obj.getData2(); // undefined
Без this
их лучше подходят для неметодных функций. Использование их в качестве методов приводит к неопределенности.
// Old function Person() { var that = this; that.age = 0; setInterval(function growUp() { that.age++; // this.age would refer to growUp, instead of Person. }, 1000); } // New function Person() { this.age = 0; setInterval(() => { this.age++; // this refers to the Person object. }, 1000); }
Для цикла
let items = [1, 2, 3]; // Old for (var i = 0; i < items.length; i++) { console.log(array[i]); } // New for (let item of items) { console.log(item); }
Генераторы
Генераторы — это специальные функции, которые можно приостанавливать и возобновлять несколько раз, возвращая значение каждый раз, когда они приостанавливаются. Они допускают форму ленивых вычислений, предоставляя значения одно за другим, а не все сразу. Они обозначаются знаком «*» перед ключевым словом «функция» и используют ключевое слово «доходность» для приостановки и предоставления значения.
function* generateThreeNumbers() { yield 1; yield 2; yield 3; } var numberIterator = generateThreeNumbers(); numberIterator.next(); // { value: 1, done: false } numberIterator.next(); // { value: 2, done: false } numberIterator.next(); // { value: 3, done: false } numberIterator.next(); // { value: undefined, done: true }
Разрушение
Деструктуризация JavaScript — это функция, позволяющая извлекать значения из массивов или объектов в отдельные переменные. Он предоставляет сокращенный синтаксис для создания переменных из данных, хранящихся в объектах или массивах, и позволяет одновременно извлекать несколько значений, упрощая доступ к нужным значениям.
const address = { street: "", city: "", country: "", }; // old const street = address.street; const city = address.city; const country = address.country; // new const { street, city, country: ctry } = address; // We can also rename the variables // array var foo = [1, 2, 3, 4]; var [one, two, three] = foo; console.log(one); // 1 console.log(two); // 2 console.log(three); // 3 // Default values. They work only if a property is undefined. null, false and 0 are all still values! var obj = { a: 1 }; var { a, b = "something" } = obj; console.log(a); // 1 console.log(b); // something
Объект против деструктурирования массива
Деструктуризация объекта требует больше написания, чтобы захватить переменную и переименовать ее.
// object destructuring. lots of writing! const users = { admin: "Bob", user: "Andy" }; // grab the admin and user but rename them to SuperAdmin and SuperUser const { admin: SuperAdmin, user: SuperUser } = users;
При реструктуризации массива мы просто называем переменные по мере их извлечения из массива. Первая переменная — это первый элемент массива.
// array destructuring const users = ["Bob", "Andy"]; // grab in order and rename at the same time const [SuperAdmin, SuperUser] = users;
Распространение
Используется для копирования или удаления свойств из одного объекта в другой.
Обновить свойство объекта
let obj = { foo: "foo", bar: "bar", baz: "baz", }; let newObj = { ...obj, baz: "NEW VALUE" }; console.log(obj); // { foo: "foo", bar: "bar", baz: "baz" } console.log(newObj); // { foo: "foo", bar: "bar", baz: "NEW VALUE" }
Свойства добавляются по порядку, поэтому, чтобы переопределить существующие свойства, вам нужно поместить их в конец, а не в начало.
let obj1 = { foo: "foo", bar: "bar", baz: "baz", }; let obj2 = { bar: "bar2", baz: "baz2", new: "new", }; let newObj = { ...obj1, ...obj2 }; console.log(newObj); // { foo: "foo", bar: "bar2", baz: "baz2", new: "new" }
Копировать
// Without spread const meal = { id: 1, description: "Breakfast", }; const updatedMeal = { id: meal.id, description: meal.description, calories: 600, }; // With spread const meal = { id: 1, description: "Breakfast", }; const updatedMeal = { ...meal, // Injects the id and description properties from meal. description: "Brunch", // This has precedence over the spread operator. calories: 600, };
Удалить
const meal = { id: 1, description: "Breakfast", calories: 600 } const = { id, ...mealWithoutId} = meal; // Destructuring. console.log(mealWithoutId); // Object without the id property.
Множество
const first = [1, 2, 3]; const second = [4, 5, 6]; // old const combined = first.concat(second); // new const combined = [...first, "a", ...second, "b"]; // Easy to add other items. // Another example const meals = [ { id: 1, description: "Breakfast", calories: 420 }, { id: 2, description: "Lunch", calories: 520 }, ]; const meal = { id: 3, description: "Snack", calories: 180, }; const updatedMeals = [...meals, meal]; // Returns a new array with the addition.
Нулевое слияние (??)
Нулевой оператор объединения ??
является резервным значением по умолчанию для значений falsy
, но только для null
и undefined
.
undefined ?? "not found"; // not found null ?? "not found"; // not found NaN ?? "not found"; // NaN 0 ?? "not found"; // 0 false ?? "not found"; // false "" ?? "not found"; // ""
Необязательная цепочка (?.)
Необязательная цепочка позволяет получить доступ к вложенным свойствам без проверки существования каждого объекта в цепочке.
const country = { obj: { name: null, }, }; // OLD const region = (country.obj && country.obj.name) || "France"; // NEW const region = country?.obj?.name || "France";
Заключение
Таким образом, ES6 или ECMAScript 2015 представил новые функции и обновления для JavaScript, такие как новые способы объявления переменных с помощью let и const, замену var и многое другое. В следующей части JavaScript мы подробно познакомимся с объектной моделью документа (DOM). Следите за обновлениями!
Заключительные слова
Спасибо, что нашли время прочитать эту статью. Если вы нашли это информативным и полезным, пожалуйста, поддержите меня, подписавшись на мою страницу и похлопав ее. Ваше участие побудит меня продолжать создавать для вас ценный контент.
Чтобы перейти на новый уровень, подумайте о том, чтобы стать участником Medium всего за 5 долларов США в месяц. С моей реферальной ссылкой вы получите доступ к огромному количеству знаний от тысяч писателей и присоединитесь к сообществу лидеров мнений. Улучшите свои навыки чтения и письма уже сегодня.