JavaScript очень … Очень особый язык Отказ Даже когда вы думаете, что вы знаете все свои секреты, он все еще может удивить вас.
Как и большинство вещей в этом мире, не все секреты JS действительно полезны. На самом деле большинство из них не так, как все, не известные другими, только приводит к путаница Отказ Использование секретных советов и трюков может сделать ваш код быстрее или, возможно, даже быть меньшим, но он, безусловно, ухудшает его читабельность , что плохо для всего потенциального читателя вашего кода – включая себя из будущего.
Но, с этим маленьким предупреждением о пути, нет ничего плохого в том, чтобы знать эти секреты – либо иметь возможность читать загадочный код другого или просто показывать.
Итак, без дальнейшего ADO, давайте исследовать 5 из того, что я думаю, что некоторые из наименее известных JavaScript Secrets. !
Вы знали, что есть пустота
Оператор в JS? Что это вы можете спросить? Ну, это берет выражение (простой, либо сложный, завернутый в ()
) Вы предоставляете сразу после него, оценивает его, а … Всегда возвращается undefined
Отказ
void 0; // undefined void "text"; // undefined void {}; // undefined void (() => {}); // undefined // ... you get the point
Итак, какой тип использования есть для такого Оператор ума – ошеломляющий ? Ну, как оказывается – есть один. Верю в это или нет undefined
может на самом деле быть определен Действительно
(() => { const undefined = "foo"; console.log(undefined, typeof undefined); // "foo", "string" console.log(void 0, typeof void 0); // undefined, "undefined" })();
Для вашей информации, в JS, undefined
не Зарезервировано ключевое слово и может быть использован в качестве имени переменной, эффективно переоценивающую глобальную в определенную область.
Используя пустота
Оператор со случайным выражением (обычно 0
) Уверяет вас, что вы получите правильный без изменений undefined
не важно что.
С скобками всеможены в JavaScript – так же, как практически в любом другом языке программирования. Но знал ли вы, что вам не нужно всегда писать их, даже в местах, где вы обычно делаете?
Класс конструктор
Самое безопасное место для пропущенных скобок находится в параметре менее Класс Конструктор вызов. Это верно – вы можете просто удалить свои скобки, сохранить эти 2 байта пространства, а ваш код работает просто хорошо!
new Date(); new Date; new Date().getYear(); (new Date).getYear(); // parentheses needed in a different place
IIFE.
Второй и последний (от того, что я знаю) место, где вы можете опустить скобки, находится в iiFes или Немедленно вызванные функциональные выражения Отказ
Как правило, чтобы использовать IIFE, вам необходимо обернуть функцию выражения скобками и следовать за тем, что с другой парой скобок, чтобы на самом деле вызывать функцию.
(() => { // ... })(); (function () { // ... })();
Но на самом деле упаковочные скобки не всегда требуются … по крайней мере при определенных условиях. Вы можете сделать это с функциональными выражениями, определенными с Функция
ключевое слово И только когда результат IIFE является назначен переменной или когда он предшествует Унарный оператор (Мне нравится пустота
, !
, так далее.).
void function () { // ... }(); const result = function () { // ... }();
Оператор или задание необходимо, чтобы парсер знал, что следующая функция на самом деле является Функция выражения .
К сожалению, этот метод не работает со стрелками функциями, поэтому, если ваша цель – просто побрить некоторые байты, я предлагаю вам использовать стрелку и обсуждали скобки в конце концов.
Далее у нас есть другой оператор – на этот раз короче И гораздо полезнее! Это запятая ( ,
) – Да, вы прочитали это право, которое в JS позволяет выполнять несколько выражений, один на один, когда «Возвращение» Значение, полученное из Последнее выражение Отказ Посмотри:
// parentheses are required for proper assignment const x = (1, 2, 3, 4); // 4 const y = ((() => "a")(), (() => "b")()); // "b" const test = () => { return console.log(y), y; }; test(); // logs "b" and returns "b"
Итак, как вы можете видеть, возможности оператора запятой являются Действительно впечатляет Отказ Вы можете использовать любое выражение и почти все остальное с небольшим количеством помощи от IIFES. И когда вы комбинируете это с Функции стрелки или console.log ()
Для отладки у вас есть несколько впечатляюще-короткие лямбдаса или лучшего опыта отладки без дополнительной строки кода!
И пока мы находимся в теме операторов, почему бы не обсудить еще одно недооцененные конструкции из этой категории – в
оператор. Единственным использованием для этого оператора является проверка объекта Содержит определенную недвижимость , вот так:
const obj = { a: 1, b: 2, c: 3 }; "a" in obj; // true "d" in obj; // false delete obj.a; obj.b = undefined; "a" in obj; // false "b" in obj; // true
Итак, почему вы используете модный оператор, а не просто проверять свойство с помощью obj [опора]
Синтаксис как нормальный человек?
Ну, есть некоторые определенные различия и, таким образом, Преимущества к этому подходу. Во-первых, очень удобно использовать его для проверки наличия свойств, которые могут держать Falsy ценности Отказ В таких случаях typeof obj [опора]
потребуется, что, безусловно, гораздо более многословным, чем «опоры» в Обжим
Отказ
С тем, что сказал, недостаток (или особенность в зависимости от того, как вы смотрите на него) в
Оператор заключается в том, что он возвращает правда
Даже для свойств, которые были непосредственно назначены undefined
стоимость. Если это то, что вы хотите, то я думаю, все в порядке, но это также означает, что вам придется использовать Удалить
Оператор к Удалить свойства вместо просто назначения undefined
(который немного медленнее).
Наконец, у нас есть функция, которая также редко используется – этикетки Отказ В JS, этикетки (как Имя:
) можно использовать для эффективного Имя блоки кода а также разные Странские операторы (например для
). Наличие таких наименований, назначенных на определенные части вашего кода, позволяет вам позже ссылаться на эти детали для использования с такими оперантами, такими как Продолжать
и Перерыв
Отказ
outer: for (let i = 0; i < 10; i++) { inner: for (let j = 0; j < 10; j++) { if (i === j) { continue outer; } console.log(i, j); } } block: { // Yup, code blocks are a thing console.log("You'll see this"); break block; // You can break form code blocks when they're labelled console.log("But not that"); }
Этикетки особенно полезны при работе с сложным контрольный поток в пределах Вложенные петли . Конечно, вы можете использовать их в Перерыв
Вне кодовых блоков, но я действительно не знаю, почему вы сделаете это – просто используйте функции или даже поддерживают, как нормальный человек.
Итак, это мой список некоторых из самых интересных и меньших известный JavaScript Secrets. Дайте мне знать в Комментарии Сколько из них вы сделали/не знали о том, как прочитать эту статью. О, а также – если вам нравятся такие вещи, я очень поощряю вас Проверьте 2 мой веб-разработчик трюки Статьи И все остальные вещи на этом блоге, где я охвачу секреты Консоль API , Объект API и Многие более ! Действительно крутые вещи!
Для более современного контента Web Dev, Следуй за мной на Twitter , Facebook или через Мой личный блог . Спасибо за чтение и счастливое кодирование!
Оригинал: “https://dev.to/areknawo/top-5-javascript-secrets-2gp7”