Сокращение с помощью AND
Давайте рассмотрим ситуацию, в которой у нас есть логическое значение и функция.
Давайте рассмотрим ситуацию, в которой у нас есть логическое значение и функция.
let isPrime = true;Немало кода получается ради проверки логического условия и вызова функции.
const startWatching = () => {
console.log('Started Watching!');
}
if (isPrime) {А как насчёт использования сокращённой записи вместе с оператором AND (&&)? Да, условный оператор "if" нам больше не нужен. Круто, правда?
startWatching();
}
isPrime && startWatching();#методы #and
🔥12👍6
isInteger
Это аккуратный способ узнать, является ли значение целым числом. Встроенный в JavaScript API
#методы #isInteger
Это аккуратный способ узнать, является ли значение целым числом. Встроенный в JavaScript API
Number
предоставляет для этого метод isInteger()
. Очень полезная штука, о которой следует знать.#методы #isInteger
🔥3❤2👍2
Значение по умолчанию с помощью OR
Если для переменной необходимо предусмотреть запасное значение по умолчанию, это достаточно просто реализуется с помощью оператора OR.
Если для переменной необходимо предусмотреть запасное значение по умолчанию, это достаточно просто реализуется с помощью оператора OR.
let person = {name: 'Jack'};#операторы #isInteger
// если свойство "age" равно "undefined", устанавливает значение 35
let age = person.age || 35;
console.log(Age of ${person.name} is ${age});
👍8
Произвольные значения
Генерирование произвольных значений или получение произвольного элемента массива – очень полезные методы, которые стоит держать под рукой. Я использую их почти в каждом своём проекте.
Получить произвольный элемент из массива:
Генерирование произвольных значений или получение произвольного элемента массива – очень полезные методы, которые стоит держать под рукой. Я использую их почти в каждом своём проекте.
Получить произвольный элемент из массива:
let planets = ['Mercury ', 'Mars', 'Venus', 'Earth', 'Neptune', 'Uranus', 'Saturn', 'Jupiter'];Генерирование произвольного числа из диапазона с указанием минимального и максимального значений:
let randomPlanet = planets[Math.floor(Math.random() * planets.length)];
console.log('Random Planet', randomPlanet);
let getRandom = (min, max) => {#массив
return Math.round(Math.random() * (max - min) + min);
}
console.log('Get random', getRandom(0, 10));
🔥9
Значения параметров функции по умолчанию
В JavaScript параметры функции подобны локальным переменным. При вызове этой самой функции вы можете и не передавать значения для её параметров. В этом случае они принимают значение "undefined", что может привести к нежелательным последствиям.
Существует простой способ передачи значения по умолчанию для параметров функции при их определении. В примере ниже для параметра "message" функции "greetings" передаётся значение по умолчанию "Hello".
В JavaScript параметры функции подобны локальным переменным. При вызове этой самой функции вы можете и не передавать значения для её параметров. В этом случае они принимают значение "undefined", что может привести к нежелательным последствиям.
Существует простой способ передачи значения по умолчанию для параметров функции при их определении. В примере ниже для параметра "message" функции "greetings" передаётся значение по умолчанию "Hello".
let greetings = (name, message='Hello,') => {#функция
return ${message} ${name};
}
console.log(greetings('Jack'));
console.log(greetings('Jack', 'Hola!'));
👍9
Обязательные параметры функции
Сначала объявляем функцию, которая будет выдавать в консоль сообщение об ошибке
#функция
Сначала объявляем функцию, которая будет выдавать в консоль сообщение об ошибке
let isRequired = () => {Затем эту функцию присваиваем как значение по умолчанию для параметров, которые хотим сделать обязательными. Помните, что если при вызове функции её параметр равен "
throw new Error('This is a mandatory parameter.');
}
undefined
", подставляется значение по умолчанию, в обратном случае значение по умолчанию игнорируется.let greetings = (name=isRequired(), message='Hello,') => {В примере выше параметр "
return ${message} ${name};
}
console.log(greetings());
name
" будет иметь значение "undefined
", из-за чего будет произведена попытка установить значение по умолчанию, которым и выступает функция "isRequired()
". Будет вызвана ошибка.#функция
👍13❤1🔥1
Оператор "Запятая"
В JavaScript оператор запятой используется для оценки каждого из операндов слева направо и возврата значения последнего операнда.
В JavaScript оператор запятой используется для оценки каждого из операндов слева направо и возврата значения последнего операнда.
let count = 1;В примере выше значением переменной "
let ret = (count++, count);
console.log(ret);
ret
" будет число 2. По тому же принципу, результатом следующего кода будет вывод в консоль числа 32.let val = (12, 32);Где мы его используем? Есть идеи? Чаще всего оператор запятой используется параметров в цикле "
console.log(val);
for
". В примере ниже оператор запятой задаёт значение переменной "j
" после объявления счётчика "i
".for (var i = 0, j = 50; i <= 50; i++, j--)#оператор
👍4❤1🔥1
Объединение нескольких объектов
У вас может возникнуть потребность объединить вместе два объекта, чтобы создать третий, более полный. В этом случае можно использовать оператор "
Для глубокого объединения объектов, следует использовать, например, библиотеку lodash
#объект
У вас может возникнуть потребность объединить вместе два объекта, чтобы создать третий, более полный. В этом случае можно использовать оператор "
...
" (да, три точки).let emp = {Их можно объединить с помощью spread-оператора (оператора расширения):
'id': 'E_01',
'name': 'Jack',
'age': 32,
'addr': 'India'
};
let job = {
'title': 'Software Dev',
'location': 'Paris'
};
// spread-оператор
let merged = {...emp, ...job};
console.log('Spread merged', merged);
Существует и другой путь такого объединения. С помощью "Object.assign()
"console.log('Object assign', Object.assign({}, emp, job));Обратите внимание, что и spread-оператор и "
Object.assign
" выполняют поверхностное (shallow) объединение. При поверхностном объединении, если свойства повторяются, то происходит перезапись первого объекта данными из таких же свойств второго.Для глубокого объединения объектов, следует использовать, например, библиотеку lodash
#объект
👍5❤1🔥1
Обмен значений переменных
С помощью техники деструктуризации, это сделать очень просто
С помощью техники деструктуризации, это сделать очень просто
let fire = '';#переменные
let fruit = '';
[fruit, fire] = [fire, fruit];
console.log(fire, fruit);
👍7❤1🔥1
isArray
Ещё один полезный метод, на этот раз позволяющий определить, являются ли входящие данные массивом
Ещё один полезный метод, на этот раз позволяющий определить, являются ли входящие данные массивом
let emojis = ['', '️', '', ''];#массив
console.log(Array.isArray(emojis));
let obj = {};
console.log(Array.isArray(obj));
👍5
"undefined" против "null"
"
"
"
"
undefined
" – присутствует у переменной, которая была объявлена, но значение для неё задано не было"
null
" – обозначает пустое или несуществующее значение, которое явно присваивается переменной"
undefined
" и "null
" не равны при строгом сравнивании:undefined === null // false#массив
👍7
Получение фрагментов url-адреса
Объект "
Одно из свойств, которое мне кажется очень полезным
Для получения параметров запроса, помимо "location.search" можно использовать ещё один полезный API, называемый "URLSearchParams".
#url
Объект "
window.location
" имеет набор полезных методов и свойств. С помощью них мы можем получить данные про протокол, хост, порт, домен и тому подобное из url-адреса браузера.Одно из свойств, которое мне кажется очень полезным
window.location.searchСвойство "
search
" возвращает фрагмент строки url-адреса, находящийся после вопросительного знака: "?project=js
".Для получения параметров запроса, помимо "location.search" можно использовать ещё один полезный API, называемый "URLSearchParams".
let project = new URLSearchParams(location.search).get('project');В результате получаем "
js
"#url
🔥7
Фильтр уникальных значений
Тип Set был введен в ES6, и наряду с оператором «spread» ... мы можем использовать его для создания нового массива с уникальными значениями.
Этот трюк работает для массивов, содержащих примитивные типы: undefined, null, boolean, string и number. (Если бы у вас был массив, содержащий объекты, функции или дополнительные массивы, вам понадобился бы другой подход!)
#массив
Тип Set был введен в ES6, и наряду с оператором «spread» ... мы можем использовать его для создания нового массива с уникальными значениями.
const array = [1, 1, 2, 3, 5, 5, 1]До ES6 фильтрация уникальных значений потребовала бы гораздо больше кода, чем сейчас!
const uniqueArray = [...new Set(array)];
Этот трюк работает для массивов, содержащих примитивные типы: undefined, null, boolean, string и number. (Если бы у вас был массив, содержащий объекты, функции или дополнительные массивы, вам понадобился бы другой подход!)
#массив
❤7
Кешируем длину массива в циклах
Когда нас учат циклам for, нам рекомендуется следовать этой стандартной структуре:
Иногда это может быть полезно, но в большинстве случаев лучше и эффективнее кэшировать длину массива, так что к ней нужно обратиться только 1 раз. Мы можем сделать это, определив переменную
#цикл
Когда нас учат циклам for, нам рекомендуется следовать этой стандартной структуре:
for (let i = 0; i < array.length; i++){Однако, используя этот синтаксис, цикл for пересматривает длину массива при каждой итерации.
console.log(i);
}
Иногда это может быть полезно, но в большинстве случаев лучше и эффективнее кэшировать длину массива, так что к ней нужно обратиться только 1 раз. Мы можем сделать это, определив переменную
length
for (let i = 0, length = array.length; i < length; i++){Этот код почти такой же лаконичный, как и приведенный выше, но он работает таким образом, что при увеличении размера массива мы не теряем время на перепроверку
console.log(i);
}
array.length
.#цикл
🔥15👍2
Вычисление короткого замыкания
Тернарный оператор - это быстрый способ написать простые (а иногда и не очень простые) условные конструкции, например:
#оператор
Тернарный оператор - это быстрый способ написать простые (а иногда и не очень простые) условные конструкции, например:
x > 100 ? 'Above 100' : 'Below 100';Но иногда даже тернарный оператор получается сложнее, чем нужно. Вместо него мы можем использовать логические операторы «и» && и «или» || для более точной оценки определенных выражений. Его часто называют «коротким замыканием».
x > 100 ? (x > 200 ? 'Above 200' : 'Between 100-200') : 'Below 100';
#оператор
👍9
Преобразование в Boolean
Помимо обычных логических значений true и false, JavaScript также обрабатывает все другие значения как «правдивые» или «ложные».
Если не указано иное, все значения в JavaScript являются «правдивыми» за исключением
Мы можем легко переключаться между true и false, используя отрицательный оператор !, который также преобразует тип в "boolean" .
#типы
Помимо обычных логических значений true и false, JavaScript также обрабатывает все другие значения как «правдивые» или «ложные».
Если не указано иное, все значения в JavaScript являются «правдивыми» за исключением
0, "", null, undefined, NaN
и, конечно false
- которые являются «falsy».Мы можем легко переключаться между true и false, используя отрицательный оператор !, который также преобразует тип в "boolean" .
const isTrue = !0;Этот тип преобразования типов может быть полезен в условных выражениях, хотя единственная причина, по которой вы бы решили определить false как !1, это если бы вы играли в code golf!
const isFalse = !1;
const alsoFalse = !!0;
#типы
👍3
Преобразование в String
Чтобы быстро преобразовать число в строку, мы можем использовать оператор конкатенации + , за которым следует пустой набор кавычек "" .
Чтобы быстро преобразовать число в строку, мы можем использовать оператор конкатенации + , за которым следует пустой набор кавычек "" .
const val = 1 + "";#типы
console.log(val); // Result: "1"
console.log(typeof val); // Result: "string"
👍5
Преобразование в Number
Можно быстро сделать с помощью оператора сложения
#типы
Можно быстро сделать с помощью оператора сложения
+
.let int = "15";Это также может быть использовано для преобразования
int = +int;
console.log(int); // Result: 15
console.log(typeof int); Result: "number"
boolean
в числа, как показано ниже:console.log(+true); // Return: 1Могут быть контексты, в которых оператор + будет интерпретироваться как оператор конкатенации, а не как оператор сложения. В таком кейсе (вы хотите вернуть целое число, а не с плавающей точкой), вы можете использовать тильды:
console.log(+false); // Return: 0
~~
.const int = ~~"15"Хотя я не могу придумать много вариантов использования, но побитовый оператор NOT также можно использовать в логических значениях:
console.log(int); // Result: 15
console.log(typeof int); Result: "number"
~true = -2
и ~false = -1
.#типы
👍4🔥3
Быстрое возведение в степень
Начиная с ES7 стало возможным использовать оператор возведения в степень ** как сокращение для степеней, что быстрее, чем запись Math.pow(2, 3). Это простой материал, но он попал в список, потому что не так много учебных содержит этот оператор!
До ES7 сокращение существовало только для степеней с основанием 2 с использованием оператора побитового сдвига влево << :
#операция
Начиная с ES7 стало возможным использовать оператор возведения в степень ** как сокращение для степеней, что быстрее, чем запись Math.pow(2, 3). Это простой материал, но он попал в список, потому что не так много учебных содержит этот оператор!
console.log(2 ** 3); // Result: 8Не следует его путать с ^ символом, обычно используемым для записи показателей степени, т.к в JavaScript он является побитовым оператором XOR.
До ES7 сокращение существовало только для степеней с основанием 2 с использованием оператора побитового сдвига влево << :
// The following expressions are equivalent:Например, 2 << 3 = 16 эквивалентно 2 ** 4 = 16 .
Math.pow(2, n);
2 << (n - 1);
2**n;
#операция
👍2🔥1
Быстрое преобразование Float в Integer
Если вы хотите преобразовать число с плавающей точкой в целое число, вы можете использовать Math.floor(), Math.ceil() или Math.round(). Но есть также более быстрый способ обрезать число с плавающей точкой до целого числа, используя | оператор побитового ИЛИ.
Если n положительно, n | 0 округляется в большую сторону. Если n отрицательное - округляется в меньшую. Чтобы выразиться точнее, эта операция удаляет все, что следует после десятичной точки, усекая число с плавающей точкой до целого числа.
Причины, по которым эти конкретные операции работают, заключаются в том, что после принудительного преобразования в целое число, значение остается неизменным.
#операция
Если вы хотите преобразовать число с плавающей точкой в целое число, вы можете использовать Math.floor(), Math.ceil() или Math.round(). Но есть также более быстрый способ обрезать число с плавающей точкой до целого числа, используя | оператор побитового ИЛИ.
console.log(23.9 | 0); // Result: 23Поведение | зависит от того, имеете ли вы дело с положительными или отрицательными числами, поэтому лучше использовать его вы точно уверены в операндах.
console.log(-23.9 | 0); // Result: -23
Если n положительно, n | 0 округляется в большую сторону. Если n отрицательное - округляется в меньшую. Чтобы выразиться точнее, эта операция удаляет все, что следует после десятичной точки, усекая число с плавающей точкой до целого числа.
Причины, по которым эти конкретные операции работают, заключаются в том, что после принудительного преобразования в целое число, значение остается неизменным.
#операция
👍8