12 ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»ΠΎΠ²

12 ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JavaScript, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Ρ‚ΡƒΡ‚ΠΎΡ€ΠΈΠ°Π»ΠΎΠ²

Когда я Π½Π°Ρ‡Π°Π» ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ JavaScript, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ составил список ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°Π»ΠΈ ΠΌΠ½Π΅ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя. Π― подсмотрСл ΠΈΡ… Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… программистов, Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… сайтах ΠΈ Π² ΠΌΠ°Π½ΡƒΠ°Π»Π°Ρ….

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΠΊΠ°ΠΆΡƒ 12 ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Ρ… способов ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ свой JavaScript-ΠΊΠΎΠ΄. Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΎΠ½ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹.

НапоминаСм: для всСх Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ Β«Π₯Π°Π±Ρ€Π°Β» β€” скидка 10 000 Ρ€ΡƒΠ±Π»Π΅ΠΉ ΠΏΡ€ΠΈ записи Π½Π° любой курс Skillbox ΠΏΠΎ ΠΏΡ€ΠΎΠΌΠΎΠΊΠΎΠ΄Ρƒ Β«Π₯Π°Π±Ρ€Β».

Skillbox Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚: ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ курс Β«ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ PROΒ».

Π€ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

ΠœΠΠ‘Π‘Π˜Π’Π«

Π’ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Set Π±Ρ‹Π» Π²Π²Π΅Π΄Π΅Π½ Π² ES6, вмСстС с …, spread-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ массива, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ содСрТатся лишь ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ значСния.

const array = [1, 1, 2, 3, 5, 5, 1]
const uniqueArray = [...new Set(array)];
 
console.log(uniqueArray); // Result: [1, 2, 3, 5]

Π’ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ситуации для выполнСния Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ большС ΠΊΠΎΠ΄Π°.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ для массивов, содСрТащих ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹: undefined, null, boolean, string ΠΈ number. Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с массивом, содСрТащим ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ массивы, Π²Π°ΠΌ понадобится Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Π”Π»ΠΈΠ½Π° кэш-массива Π² Ρ†ΠΈΠΊΠ»Π°Ρ…

Π¦Π˜ΠšΠ›Π«

Когда Π²Ρ‹ ΠΈΠ·ΡƒΡ‡Π°Π΅Π΅Ρ‚Π΅ for для Ρ†ΠΈΠΊΠ»ΠΎΠ², Ρ‚ΠΎ слСдуСтС стандартной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅:

for (let i = 0; i < array.length; i++){
  console.log(i);
}

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ синтаксисС Ρ†ΠΈΠΊΠ» for ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ провСряСт Π΄Π»ΠΈΠ½Ρƒ массива ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Иногда это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв эффСктивнСС ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ массива, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ обращСния ΠΊ Π½Π΅ΠΌΡƒ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡƒΡ‚Π΅ΠΌ опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Π³Π΄Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊ:

for (let i = 0, length = array.length; i < length; i++){
  console.log(i);
}

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅, Π½ΠΎ ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ†ΠΈΠΊΠ»Π° ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ экономию Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠžΡ†Π΅Π½ΠΊΠ° ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ замыкания (ΠΎΡ†Π΅Π½ΠΊΠ° ΠœΠ°ΠΊΠΊΠ°Ρ€Ρ‚ΠΈ)

Π£Π‘Π›ΠžΠ’ΠΠ«Π• ΠžΠŸΠ•Π ΠΠ’ΠžΠ Π«

Π’Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ β€” быстрый ΠΈ эффСктивный способ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ простыС (Π° ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ простыС) conditional statements:

Ρ…> 100? «большС 100Β»: «мСньшС 100Β»;
Ρ…> 100? (x> 200? «большС 200Β»: Β«ΠΌΠ΅ΠΆΠ΄Ρƒ 100-200Β»): «мСньшС 100Β»;

Но ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π°ΠΆΠ΅ Ρ‚Π΅Ρ€Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ слоТнСС, Ρ‡Π΅ΠΌ трСбуСтся. ВмСсто Π½Π΅Π³ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ β€˜and’ && ΠΈ β€˜or’ || логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для ΠΎΡ†Π΅Π½ΠΊΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ способом. Π•Π³ΠΎ часто Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΌ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ΠΌΒ» ΠΈΠ»ΠΈ Β«ΠΎΡ†Π΅Π½ΠΊΠΎΠΉ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ³ΠΎ замыкания».

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ условий.

ИспользованиС && Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ false Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ оцСниваСтся ΠΊΠ°ΠΊ true, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ послСднСС вычислСнноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

let one = 1, two = 2, three = 3;
console.log(one && two && three); // Result: 3
 
console.log(0 && null); // Result: 0

ИспользованиС || ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ true Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ оцСниваСтся ΠΊΠ°ΠΊ false, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΎ послСднСС вычислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

let one = 1, two = 2, three = 3;
console.log(one || two || three); // Result: 1
 
console.log(0 || null); // Result: null

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ length ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅ΠΌ Π΅Π΅ Ρ‚ΠΈΠΏ.

Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ if/else для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ foo β€” подходящий Ρ‚ΠΈΠΏ, Π½ΠΎ этот способ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ слишком Π΄ΠΎΠ»Π³ΠΈΠΌ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ возьмСм нашС Β«ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅Β».

return (foo || []).length;

Если пСрСмСнная foo ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ length, Ρ‚ΠΎ ΠΎΠ½Π° ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π°. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ 0.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2

Π‘Ρ‹Π»ΠΈ Π»ΠΈ Ρƒ вас ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с доступом ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ? Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π·Π½Π°Ρ‚ΡŒ, сущСствуСт Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π΅Π³ΠΎ подсвойств, ΠΈ это ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ.

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ свойству data Π² this.state, Π½ΠΎ data Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, ΠΏΠΎΠΊΠ° наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π²Π΅Ρ€Π½Π΅Ρ‚ запрос Π½Π° Π²Ρ‹Π±ΠΎΡ€ΠΊΡƒ.

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π³Π΄Π΅ ΠΌΡ‹ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ, Π²Ρ‹Π·ΠΎΠ² this.state.data ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠ΅ΡˆΠ°Ρ‚ΡŒ запуску прилоТСния. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΠΎΠ±Π΅Ρ€Π½ΡƒΡ‚ΡŒ это Π² условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

if (this.state.data) {
  return this.state.data;
} else {
  return 'Fetching Data';
}

Π‘ΠΎΠ»Π΅Π΅ подходящим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«orΒ».

return (this.state.data || 'Fetching Data');

ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π²Ρ‹ΡˆΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ &&. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ‘Fetching Data’ && this.state.data Π²Π΅Ρ€Π½Π΅Ρ‚ this.state.data нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, являСтся ΠΎΠ½ undefined ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°

МоТно ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ свойство Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π² Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽ структуру. Π’Π°ΠΊ, символ Π·Π½Π°ΠΊΠ° вопроса? ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для извлСчСния свойства, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ½ΠΎ Π½Π΅ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ (null).

НапримСр, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²Ρ‹ΡˆΠ΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² this.state.data?.. (). Π’ΠΎ Π΅ΡΡ‚ΡŒ data возвращаСтся лишь Π² Ρ‚ΠΎΠΌ случаС, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ null.

Или, Ссли Π²Π°ΠΆΠ½ΠΎ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ Π»ΠΈ state ΠΈΠ»ΠΈ Π½Π΅Ρ‚, ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ this.state?.data.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Boolean

ΠŸΠ Π•ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π• Π’Π˜ΠŸΠžΠ’

ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… логичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ true ΠΈ false, JavaScript Ρ‚Π°ΠΊΠΆΠ΅ рассматриваСт всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ значСния ΠΊΠ°ΠΊ truthy ΠΈΠ»ΠΈ falsy.

Пока Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΈΠ½ΠΎΠ΅, всС значСния Π² JavaScript β€” truthy, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ 0, «», null, undefined, NaN ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, false. ПослСдниС ΡΠ²Π»ΡΡŽΡ‚ΡΡ falsy.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ !, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Ρ‚ΠΈΠΏ Π² логичСский.

const isTrue  = !0;
const isFalse = !1;
const alsoFalse = !!0;
 
console.log(true); // Result: true
console.log(typeof true); // Result: "boolean"

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² строку

ΠŸΠ Π•ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π• Π’Π˜ΠŸΠžΠ’

БыстроС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа Π² строку ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

const val = 1 + "";
 
console.log(val); // Result: "1"
console.log(typeof val); // Result: "string"

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ†Π΅Π»ΠΎΠ΅ число

ΠŸΠ Π•ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π• Π’Π˜ΠŸΠžΠ’

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ выполняСм Ρ‚Π°ΠΊ.

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

ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ситуации, ΠΊΠΎΠ³Π΄Π° + Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠ½ΠΊΠ°Ρ‚Π΅Π½Π°Ρ†ΠΈΠΈ, Π° Π½Π΅ слоТСния. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ этого стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠ»ΡŒΠ΄Ρ‹: ~~. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ эквивалСнтСн Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ -n-1. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ~ 15 Ρ€Π°Π²Π½ΠΎ -16.

ИспользованиС Π΄Π²ΡƒΡ… Ρ‚ΠΈΠ»ΡŒΠ΄ подряд сводит Π½Π° Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ β€” (- β€” n β€” 1) β€” 1 = n + 1 β€” 1 = n. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ~ -16 Ρ€Π°Π²Π½ΠΎ 15.

const int = ~~"15"
console.log(int); // Result: 15
console.log(typeof int); Result: "number"

<Quick Powers

ΠžΠŸΠ•Π ΠΠ¦Π˜Π˜

Начиная с ES7, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ возвСдСния Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ** Π² качСствС сокращСния для стСпСнСй. Π­Ρ‚ΠΎ Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ использованиС Math.pow (2, 3). Π’Ρ€ΠΎΠ΄Π΅ просто, Π½ΠΎ Π² список ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²Π΅Π·Π΄Π΅ ΠΎΠ½ упоминаСтся.

console.log(2 ** 3); // Result: 8

НС стоит ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π΅Π³ΠΎ с символом ^, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для возвСдСния Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ. Но Π²ΠΎΡ‚ Π² JavaScript это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ XOR.

Π”ΠΎ ES7 сокращСниС ** ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для стСпСнСй с основаниСм 2 с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ±ΠΈΡ‚ΠΎΠ²ΠΎΠ³ΠΎ сдвига Π²Π»Π΅Π²ΠΎ <<:

Math.pow(2, n);
2 << (n - 1);
2**n;

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, 2 << 3 = 16 эквивалСнтно Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ 2 ** 4 = 16.

Float Π² Ρ†Π΅Π»ΠΎΠ΅ число

ΠžΠŸΠ•Π ΠΠ¦Π˜Π˜ / ΠŸΠ Π•ΠžΠ‘Π ΠΠ—ΠžΠ’ΠΠΠ˜Π• Π’Π˜ΠŸΠžΠ’

ΠŸΡ€ΠΈ нСобходимости ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ float Π² Ρ†Π΅Π»ΠΎΠ΅ число ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Math.floor(), Math.ceil() ΠΈΠ»ΠΈ Math.round(). Но Π΅ΡΡ‚ΡŒ ΠΈ Π±ΠΎΠ»Π΅Π΅ быстрый ΠΏΡƒΡ‚ΡŒ, для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ |, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ OR.

console.log(23.9 | 0);  // Result: 23
console.log(-23.9 | 0); // Result: -23

ПовСдСниС | Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ Π΄Π΅Π»ΠΎ с ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами, поэтому этот способ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π²Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚Π΅.

n | 0 удаляСт всС, Ρ‡Ρ‚ΠΎ ΠΈΠ΄Π΅Ρ‚ послС дСсятичного раздСлитСля, усСкая число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π΄ΠΎ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ эффСкт округлСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ~~. ПослС ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прСобразования Π² Ρ†Π΅Π»ΠΎΠ΅ число Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Π£Π±ΠΈΡ€Π°Π΅ΠΌ Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠ΅ числа

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ OR ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ любоС количСство Ρ†ΠΈΡ„Ρ€ ΠΈΠ· числа. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹, ΠΊΠ°ΠΊ здСсь:

let str = "1553";
Number(str.substring(0, str.length - 1));

ВмСсто этого просто прописываСм:

console.log(1553 / 10   | 0)  // Result: 155
console.log(1553 / 100  | 0)  // Result: 15
console.log(1553 / 1000 | 0)  // Result: 1

АвтоматичСскоС связываниС

ΠšΠ›ΠΠ‘Π‘Π«

Π‘Ρ‚Ρ€Π΅Π»ΠΎΡ‡Π½Ρ‹Π΅ обозначСния ES6 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… класса, ΠΈ ΠΏΡ€ΠΈ этом подразумСваСтся привязка. Благодаря этому ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π°Ρ‚ΡŒΡΡ с ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΌΠΈΡΡ выраТСниями, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ this.myMethod = this.myMethod.bind (this)!

import React, { Component } from React;
 
export default class App extends Compononent {
  constructor(props) {
  super(props);
  this.state = {};
  }
 
myMethod = () => {
    // This method is bound implicitly!
  }
 
render() {
    return (
      <>
        <div>
          {this.myMethod()}
        </div>
      </>
    )
  }
};

ΠžΠ±Ρ€Π΅Π·ΠΊΠ° массива

ΠœΠΠ‘Π‘Π˜Π’Π«

Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ значСния ΠΈΠ· массива, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ быстрыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Π΅ΠΌ splice().

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Ссли Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ массива, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ свойство length ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array.length = 4;
 
console.log(array); // Result: [0, 1, 2, 3]

Но Π΅ΡΡ‚ΡŒ ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ быстрый. Если для вас ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, Ρ‚ΠΎ Π²ΠΎΡ‚ наш Π²Ρ‹Π±ΠΎΡ€:

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array = array.slice(0, 4);
 
console.log(array); // Result: [0, 1, 2, 3]

Π’Ρ‹Π²ΠΎΠ΄ послСднСго значСния (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ) массива

ΠœΠΠ‘Π‘Π˜Π’Π«
Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠ΅ΠΌ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° slice().

let array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
 
console.log(array.slice(-1)); // Result: [9]
console.log(array.slice(-2)); // Result: [8, 9]
console.log(array.slice(-3)); // Result: [7, 8, 9]

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ JSON-ΠΊΠΎΠ΄Π°

JSON

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΡƒΠΆΠ΅ использовали JSON.stringify. Π—Π½Π°Π΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ваш JSON?

ΠœΠ΅Ρ‚ΠΎΠ΄ stringify () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ replacer, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ³ΠΎ JSON, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ space.

console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, 't'));
 
// Result:
// '{
//     "alpha": A,
//     "beta": B
// }'

Π’ΠΎΡ‚ ΠΈ всС, надСюсь, Ρ‡Ρ‚ΠΎ всС ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹. А ΠΊΠ°ΠΊΠΈΠ΅ хитрости Π·Π½Π°Π΅Ρ‚Π΅ Π²Ρ‹? ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΈΡ… Π² коммСнтариях.

Skillbox Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com