Сокращенные методы любого языка программирования помогают вам писать более чистый и оптимизированный код и позволяют вам достичь своей цели с меньшим количеством кода. Давайте обсудим некоторые приемы стенографии 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, которые сэкономят ваше время