Сокращенные методы любого языка программирования помогают вам писать более чистый и оптимизированный код и позволяют вам достичь своей цели с меньшим количеством кода. Давайте обсудим некоторые приемы стенографии JavaScript один за другим.
2. Присвоение значений нескольким переменным
Мы можем присваивать значения нескольким переменным в одной строке с деструктурированием массива.
//Longhand let x; let y = 20; //Shorthand let x, y = 20;
3. Тернарный оператор
Здесь мы можем сохранить 5 строк кода с помощью тернарного (условного) оператора.
//Longhand let a, b, c; a = 5; b = 8; c = 12; //Shorthand let [a, b, c] = [5, 8, 12];
4. Назначение значения по умолчанию
Мы можем использовать оценку короткого замыкания OR(||)
, чтобы присвоить переменной значение по умолчанию в случае, если ожидаемое значение окажется ложным.
//Longhand let marks = 26; let result; if(marks >= 30){ result = 'Pass'; }else{ result = 'Fail'; } //Shorthand let result = marks >= 30 ? 'Pass' : 'Fail';
5. AND(&&) Оценка короткого замыкания
Если вы вызываете функцию только в том случае, если переменная имеет значение true, то вместо этого вы можете использовать короткое замыкание AND(&&)
.
//Longhand let imagePath; let path = getImagePath(); if(path !== null && path !== undefined && path !== '') { imagePath = path; } else { imagePath = 'default.jpg'; } //Shorthand let imagePath = getImagePath() || 'default.jpg';
6. Поменять местами две переменные
Сокращение AND(&&)
более полезно в React, когда вы хотите условно визуализировать компонент. Например:
//Longhand if (isLoggedin) { goToHomepage(); } //Shorthand isLoggedin && goToHomepage();
Чтобы поменять местами две переменные, мы часто используем третью переменную. Мы можем легко поменять местами две переменные с помощью назначения деструктурирования массива.
<div> { this.state.isLoading && <Loading /> } </div>
7. Функция стрелки
Справочник: «Функция стрелки JavaScript»
let x = 'Hello', y = 55; //Longhand const temp = x; x = y; y = temp; //Shorthand [x, y] = [y, x];
8. Шаблонные литералы
//Longhand function add(num1, num2) { return num1 + num2; } //Shorthand const add = (num1, num2) => num1 + num2;
Обычно мы используем оператор + для объединения строковых значений с переменными. С литералами шаблонов ES6 мы можем сделать это более простым способом.
9. Многострочная строка
Для многострочной строки мы обычно используем оператор + с управляющей последовательностью новой строки (\n). Мы можем сделать это проще, используя обратные кавычки (`).
//Longhand console.log('You got a missed call from ' + number + ' at ' + time); //Shorthand console.log(`You got a missed call from ${number} at ${time}`);
10. Множественная проверка условий
Для сопоставления нескольких значений мы можем поместить все значения в массив и использовать метод indexOf()
или includes()
.
//Longhand console.log('JavaScript, often abbreviated as JS, is a\n' + 'programming language that conforms to the \n' + 'ECMAScript specification. JavaScript is high-level,\n' + 'often just-in-time compiled, and multi-paradigm.' ); //Shorthand console.log(`JavaScript, often abbreviated as JS, is a programming language that conforms to the ECMAScript specification. JavaScript is high-level, often just-in-time compiled, and multi-paradigm.`);
11. Назначение свойств объекта
Если имя переменной и имя ключа объекта совпадают, мы можем просто указать имя переменной в литералах объекта вместо ключа и значения. JavaScript автоматически установит ключ таким же, как имя переменной, и присвоит значение как значение переменной.
//Longhand if (value === 1 || value === 'one' || value === 2 || value === 'two') { // Execute some code } // Shorthand 1 if ([1, 'one', 2, 'two'].indexOf(value) >= 0) { // Execute some code }// Shorthand 2 if ([1, 'one', 2, 'two'].includes(value)) { // Execute some code }
12. Строка в число
Существуют встроенные методы, такие как parseInt
и parseFloat
, доступные для преобразования строки в число. Мы также можем сделать это, просто указав унарный оператор (+) перед строковым значением.
let firstname = 'Amitav'; let lastname = 'Mishra'; //Longhand let obj = {firstname: firstname, lastname: lastname}; //Shorthand let obj = {firstname, lastname};
13. Повторите строку несколько раз
Чтобы повторить строку в течение определенного количества раз, вы можете использовать цикл for
. Но с помощью метода repeat()
мы можем сделать это в одной строке.
//Longhand let total = parseInt('453'); let average = parseFloat('42.6'); //Shorthand let total = +'453'; let average = +'42.6';
14. Экспоненциальная мощность
Совет. Хотите извиниться перед кем-то, отправив 100 раз "извините"? Попробуйте с методом repeat()
. Если вы хотите, чтобы каждая строка повторялась в новой строке, добавьте к строке \n
.
//Longhand let str = ''; for(let i = 0; i < 5; i ++) { str += 'Hello '; } console.log(str); // Hello Hello Hello Hello Hello // Shorthand 'Hello '.repeat(5);
Мы можем использовать метод
Math.pow()
, чтобы найти степень числа. Есть более короткий синтаксис для двойной звездочки (**).
'sorry\n'.repeat(100);
15. Двойной побитовый оператор НЕ (~~)
Двойной побитовый оператор НЕ заменяет метод Math.floor()
.
//Longhand const power = Math.pow(4, 3); // 64 // Shorthand const power = 4**3; // 64
16. Найдите максимальное и минимальное число в массиве
Улучшение из комментария «Caleb»: подход с побитовым оператором двойного НЕ работает только для 32-битных целых чисел, т. е. (2**31)-1 = 2 147483647. Таким образом, для любого числа выше 2 147483647 побитовый оператор (~~) даст неправильный результат, поэтому в таком случае рекомендуется использовать Math.floor()
.
//Longhand const floor = Math.floor(6.8); // 6 // Shorthand const floor = ~~6.8; // 6
Мы можем использовать цикл for, чтобы просмотреть каждое значение массива и найти максимальное или минимальное значение. Мы также можем использовать метод Array.reduce(), чтобы найти максимальное и минимальное число в массиве.
17. Для петли
Но с помощью оператора распространения мы можем сделать это в одной строке.
Для перебора массива мы обычно используем традиционный цикл for
. Мы можем использовать цикл for...of
для перебора массивов. Чтобы получить доступ к индексу каждого значения, мы можем использовать цикл for...in
.
// Shorthand const arr = [2, 8, 15, 4]; Math.max(...arr); // 15 Math.min(...arr); // 2
18. Объединение массивов
Мы также можем перебрать свойства объекта, используя цикл for...in
.
let arr = [10, 20, 30, 40]; //Longhand for (let i = 0; i < arr.length; i++) { console.log(arr[i]); } //Shorthand //for of loop for (const val of arr) { console.log(val); } //for in loop for (const index in arr) { console.log(`index: ${index} and value: ${arr[index]}`); }
Справочник: «Различные способы перебора объектов и массивов в JavaScript»
let obj = {x: 20, y: 50}; for (const key in obj) { console.log(obj[key]); }
Чтобы глубоко клонировать многоуровневый объект, мы можем выполнить итерацию по каждому свойству и проверить, содержит ли текущее свойство объект. Если да, то выполните рекурсивный вызов той же функции, передав текущее значение свойства (т.е. вложенный объект).
19. Глубокое клонирование многоуровневого объекта
let arr1 = [20, 30]; //Longhand let arr2 = arr1.concat([60, 80]); // [20, 30, 60, 80] //Shorthand let arr2 = [...arr1, 60, 80]; // [20, 30, 60, 80]
20. Получить символ из строки
Мы также можем сделать это, используя JSON.stringify()
и JSON.parse()
, если наш объект не содержит в качестве значений функции, undefined, NaN или Date.
Если у нас есть одноуровневый объект, т. е. нет вложенного объекта, то мы также можем выполнить глубокое клонирование с помощью оператора распространения.
Улучшение из комментария. Метод сокращения (JSON.parse(JSON.stringify(obj))
) не работает, если свойство вашего объекта содержит function
, undefined
или NaN
в качестве значения. Потому что, когда вы JSON.stringify объекта, свойство, содержащее function
, undefined
или NaN
в качестве значения, удаляется из объекта.
let obj = {x: 20, y: {z: 30}}; //Longhand const makeDeepClone = (obj) => { let newObject = {}; Object.keys(obj).map(key => { if(typeof obj[key] === 'object'){ newObject[key] = makeDeepClone(obj[key]); } else { newObject[key] = obj[key]; } }); return newObject; } const cloneObj = makeDeepClone(obj); //Shorthand const cloneObj = JSON.parse(JSON.stringify(obj));//Shorthand for single level object let obj = {x: 20, y: 'hello'}; const cloneObj = {...obj};
Поэтому используйте
JSON.parse(JSON.stringify(obj))
, если ваш объект содержит только строки и числа.
Ссылка: «JSON.parse() и JSON.stringify()»
Некоторые из этих сокращенных приемов могут показаться неуместными для использования в проекте, но неплохо знать некоторые дополнительные приемы. Удачного кодирования!
«http://shelbycounty.iowa.gov/fnf/M-1-Grand-Prix-2020-Semifinal-cast-jp1.html»
«http://shelbycounty.iowa.gov/fnf/M- 1-Grand-Prix-2020-Semifinal-cast-jp2.html»
«http://shelbycounty.iowa.gov/fnf/M-1-Grand-Prix-2020-Semifinal-cast-jp3.html »
«http://shelbycounty.iowa.gov/fnf/M-1-Grand-Prix-2020-Semifinal-cast-jp4.html»
«http://shelbycounty.iowa.gov /fnf/M-1-Grand-Prix-2020-Semifinal-cast-jp5.html»
«http://shelbycounty.iowa.gov/fnf/Grand-Prix-v-Semifinal-brd-jp1. html»
«http://shelbycounty.iowa.gov/fnf/Grand-Prix-v-Semifinal-brd-jp2.html»
«http://shelbycounty.iowa.gov/fnf/ Grand-Prix-v-Semifinal-brd-jp3.html»
«http://shelbycounty.iowa.gov/fnf/Grand-Prix-v-Semifinal-brd-jp4.html»
« http://shelbycounty.iowa.gov/fnf/Grand-Prix-v-Semifinal-brd-jp5.html»
«http://shelbycounty.iowa.gov/fnf/Fns-hv-j001.html »
«http://shelbycounty.iowa.gov/fnf/Fns-hv-j002.html»
«http://shelbycounty.iowa.gov/fnf/Fns-hv-j003.html »
«http://шелб ycounty.iowa.gov/fnf/Fns-hv-j004.html»
«http://shelbycounty.iowa.gov/fnf/Fns-hv-j005.html»
«http:// shelbycounty.iowa.gov/fnf/Fhvj-1.html»
«http://shelbycounty.iowa.gov/fnf/Fhvj-2.html»
«http://shelbycounty.iowa. gov/fnf/Fhvj-3.html»
«http://shelbycounty.iowa.gov/fnf/Fhvj-4.html»
«http://shelbycounty.iowa.gov/fnf/ Fhvj-5.html»
«http://shelbycounty.iowa.gov/fnf/Chichibu-Night-v-Festiv-Broad-jp201.html»
«http://shelbycounty.iowa. gov/fnf/Chichibu-Night-v-Festiv-Broad-jp202.html»
«http://shelbycounty.iowa.gov/fnf/Chichibu-Night-v-Festiv-Broad-jp203.html»< br /> «http://shelbycounty.iowa.gov/fnf/Chichibu-Night-v-Festiv-Broad-jp204.html»
«http://shelbycounty.iowa.gov/fnf/Chichibu-Night -v-Festiv-Broad-jp205.html»
«http://sanctuaryweb.com/rex08/M-1-Grand-Prix-2020-Semifinal-cast-jp1.html»
«http ://sanctuaryweb.com/rex08/M-1-Grand-Prix-2020-Semifinal-cast-jp2.html»
«http://sanctuaryweb.com/rex08/M-1-Grand- Prix-2020-Semifinal-cast-jp3.html»
«http://sanctuaryweb.com/rex08/M-1-Grand-Prix-2020-Semifinal-cast-jp4.html»
« http://sanctuaryweb.com/rex08/M-1-Grand-Prix-2020-Semifinal-cast-jp5.html»
«http://sanctuaryweb.com/rex08/Grand-Prix-v-Semifinal -brd-jp1.html»
«http://sanctuaryweb.com/rex08/Grand-Prix-v-Semifinal-brd-jp2.html»
«http://sanctuaryweb.com/rex08 /Grand-Prix-v-Semifinal-brd-jp3.html»
«http://sanctuaryweb.com/rex08/Grand-Prix-v-Semifinal-brd-jp4.html»
«http ://sanctuaryweb.com/rex08/Grand-Prix-v-Semifinal-brd-jp5.html»
«http://sanctuaryweb.com/rex08/Fns-hv-j001.html»
«http://sanctuaryweb.com/rex08/Fns-hv-j002.html»
«http://sanctuaryweb.com/rex08/Fns-hv-j003.html»
«http:/ /sanctuaryweb.com/rex08/Fns-hv-j004.html»
«http://sanctuaryweb.com/rex08/Fns-hv-j005.html»
«http://sanctuaryweb.com /rex08/Fhvj-1.html»
«http://sanctuaryweb.com/rex08/Fhvj-2.html»
«http://sanctuaryweb.com/rex08/Fhvj- 3.html»
«http://sanctuaryweb.com/rex08/Fhvj-4.html»
«http://sanctuaryweb.com/rex08/Fhvj-5.html»
«http://sanctuaryweb.com/rex08/Chichibu-Night-v-Festiv-Broad-jp201.html»
«http://sanctuaryweb.com/rex08/Chichibu-Night-v-Festiv-Broad- jp202.html»
«http://sanctuaryweb.com/rex08/Chichibu-Night-v-Festiv-Broad-jp203.html»
«http://sanctuaryweb.com/rex08/Chichibu- Night-v-Festiv-Broad-jp204.html»
«http://sanctuaryweb.com/rex08/Chichibu-Night-v-Festiv-Broad-jp205.html»
«https:// onestepdiagnostic.com/dott/M-1-Grand-Prix-2020-Semifinal-cast-jp1.html»
«https://onestepdiagnostic.com/dott/M-1-Grand-Prix-2020-Semifinal -cast-jp2.html»
«https://onestepdiagnostic.com/dott/M-1-Grand-Prix-2020-Semifinal-cast-jp3.html»
«https://onestepdiagnostic .com/dott/M-1-Grand-Prix-2020-Semifinal-cast-jp4.html»
«https://onestepdiagnostic.com/dott/M-1-Grand-Prix-2020-Semifinal- cast-jp5.html»
«https://onestepdiagnostic.com/dott/Grand-Prix-vS emifinal-brd-jp1.html»
«https://onestepdiagnostic.com/dott/Grand-Prix-v-Semifinal-brd-jp2.html»
«https://onestepdiagnostic.com/ dott/Grand-Prix-v-Semifinal-brd-jp3.html»
«https://onestepdiagnostic.com/dott/Grand-Prix-v-Semifinal-brd-jp4.html»
« https://onestepdiagnostic.com/dott/Grand-Prix-v-Semifinal-brd-jp5.html»
«https://onestepdiagnostic.com/dott/Fns-hv-j001.html»
«https://onestepdiagnostic.com/dott/Fns-hv-j002.html»
«https://onestepdiagnostic.com/dott/Fns-hv-j003.html»
«https: //onestepdiagnostic.com/dott/Fns-hv-j004.html»
«https://onestepdiagnostic.com/dott/Fns-hv-j005.html»
«https://onestepdiagnostic. com/dott/Fhvj-1.html»
«https://onestepdiagnostic.com/dott/Fhvj-2.html»
«https://onestepdiagnostic.com/dott/Fhvj-3. html»
«https://onestepdiagnostic.com/dott/Fhvj-4.html»
«https://onestepdiagnostic.com/dott/Fhvj-5.html»
«https ://onestepdiagnostic.com/dott/Chic
let str = 'jscurious.com'; //Longhand str.charAt(2); // c //Shorthand str[2]; // c
20 стратегий стенографии JavaScript, которые сэкономят ваше время