Привет, в этой статье вы найдете несколько советов по JavaScript, которые, возможно, вы не знаете, и они могут быть вам полезны в будущем 😃.
1. Возврат функции
Вы знаете, как работает оператор возврата? Позвольте мне привести Вам пример:
Каков результат этого кода? Это Uncaught TypeError: Cannot read property 'message' of undefined
, почему? В JavaScript есть автоматическая вставка точки с запятой (ASI), и точка с запятой вставляется автоматически. Наш возврат понимается как:
return; // Note “;” here { message: ‘Hello World’ };
Мы ничего не вернули, поэтому пытаемся получить доступ к полю message в свойстве aundefined
undefined.message
). Чтобы получить правильный результат, мы можем написать:
2. Сокращенный синтаксис для литерала объекта
Если вы создаете JavaScript литерал объекта (объект с определением свойств, разделенным запятыми), например:
Используя ES6, вы можете просто написать этот сокращенный синтаксис 😎:
Это новая функция для написания чистого кода без повторения информации. В приведенном выше случае эти свойства имеют один и тот же ключ/значение, поэтому мы можем сократить их напрямую. Это также работает с параметром функции, например, если у вас есть этот код:
myFunction({message: message});
Вы можете просто преобразовать в:
myFunction({message});
Когда у вас есть поля, которые могут быть краткими, и другие поля с другим ключом/значением, лучше написать краткие поля раньше, чем другие. Например, этот код намного читабельнее:
return { name, lastname, description: ‘A very nice person’ }
Чем:
return { name, description: ‘A very nice person’, lastname }
Наконец, вы можете использовать эту функцию также с функциями. Следующий код:
можно преобразовать в:
3. Эмблематичное это
Что будет на выходе со следующим кодом?
Результатом будетundefined
потому что мы звонимthis.message
на другоеthis
имя. С анонимусной функцией все по-другому и нам нужно задать ее, например, withbind
:
Или вы можете использовать функцию стрелки ES6, чтобы это устанавливалось автоматически:
4. Сортировка массива
Знаете ли вы, что функция sortмассива сортирует элементы, преобразуя их в строки? Например:
Какой результат вы ожидаете? Это[5, 10, 16, 25, 44]
но вы получите[10, 16, 25, 44, 5]
😮 потому что без пользовательской функции сравнения используется функция по умолчанию, и все элементы преобразуются в строки: например, "5" намного больше, чем "16", потому что "16" начинается с "1", а в Юникоде оно больше, чем "5".
console.log(5 > 16); // false console.log(“5” > “16”); //true
Используя пользовательскую функцию сравнения, вы получите правильный порядок:
5. Функция подъема
Подъем, говоря простыми словами, представляет собой механизм JavaScript, который перемещается в верхнюю часть области видимости при каждом объявлении. Например, этот код работает нормально:
Мы получимHello from myFunction()
в нашей консоли, но зачем? Объявление функции находится после вызова… это работает благодаря подъему! JavaScript перемещается вверху объявления функции кода и кода, который он преобразует следующим образом:
Давайте посмотрим на другой пример:
ФункциюmyFunction
нельзя использовать до ее объявления, потому что также для переменных есть подъем и вверху кода перемещаются только объявления переменных, а не их назначение. Код будет преобразован в:
Когда мы попытаемся вызватьmyVarFunction()
переменную по-прежнемуundefined
и мы получим ошибку.
6. Аргументы функции по умолчанию
Если вам нужно использовать значение по умолчанию, вы можете написать такой код:
Таким образом, если вы создаете человека без имени, имя по умолчанию будет John
. Что делать, если нужно добавить еще один параметр? Мы можем попробовать добавить еще один оператор if:
Добавление других значений по умолчанию читабельность хуже, будет слишком много операторов if только для значений по умолчанию… с ES6 была введена новая функция: функции параметров по умолчанию! Мы можем переписать наш код намного лучше:
7. Деструктуризация
Давайте представим, что у нас есть объект, представляющий человека с двумя полями:
Как мы можем получить доступ к полям человека? Один пример:
С помощью ES6 мы можем переписать приведенный выше код таким образом благодаря деструктуризации:
Мы создали две константы (name
иlastname)
непосредственно соperson
значениями. Это возможно, потому что мы использовали одно и то же имя поля для констант и полей объекта. с другими именами полей это не может работать, например, в следующем коде мы не получим значения: age
isundefined
потому что в person
нет поля anage
.
const {age} = person;
Деструктуризация может быть очень полезной с функциями. Представьте, если у нас есть функция, которая показывает информацию о человеке, мы можем написать:
Для каждого поля нам нужно написатьperson.
, чтобы получить все значения. Используя деструкцию в параметрах функции, мы можем рефакторить наш код таким образом (порядок не имеет значения) 😍:
Наконец, мы можем использовать эту функцию и с массивом:
Вместо того, чтобы писать что-то вроде этого:
👏