12 JavaScript рдпреБрдХреНрддреНрдпрд╛ рдЬреНрдпрд╛ рдмрд╣реБрддреЗрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЪреБрдХрддрд╛рдд

12 JavaScript рдпреБрдХреНрддреНрдпрд╛ рдЬреНрдпрд╛ рдмрд╣реБрддреЗрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЪреБрдХрддрд╛рдд

рдЬреЗрд╡реНрд╣рд╛ рдореА JavaScript рд╢рд┐рдХрд╛рдпрд▓рд╛ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА, рддреЗрд╡реНрд╣рд╛ рдореА рдкрд╣рд┐рд▓реА рдЧреЛрд╖реНрдЯ рдХреЗрд▓реА рддреА рдореНрд╣рдгрдЬреЗ рдЯреНрд░рд┐рдХреНрд╕рдЪреА рдпрд╛рджреА рдмрдирд╡рдгреЗ рдЬреНрдпрд╛рдиреЗ рдорд▓рд╛ рд╡реЗрд│ рд╡рд╛рдЪрд╡рд┐рдгреНрдпрд╛рд╕ рдорджрдд рдХреЗрд▓реА. рдореА рддреНрдпрд╛рдВрдирд╛ рдЗрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдХрдбреВрди, рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рд╛рдЗрдЯрд╡рд░ рдЖрдгрд┐ рдореЕрдиреНрдпреБрдЕрд▓рдордзреНрдпреЗ рдкрд╛рд╣рд┐рд▓реЗ.

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪрд╛ JavaScript рдХреЛрдб рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡реЗрдЧ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреЗ 12 рдЙрддреНрддрдо рдорд╛рд░реНрдЧ рджрд╛рдЦрд╡реАрди. рдмрд╣реБрддреЗрдХ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рддреЗ рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ рдЖрд╣реЗрдд.

рдЖрдореНрд╣реА рдЖрдард╡рдг рдХрд░реВрди рджреЗрддреЛ: рд╕рд░реНрд╡ Habr рд╡рд╛рдЪрдХрд╛рдВрд╕рд╛рдареА - Habr рдкреНрд░реЛрдореЛ рдХреЛрдб рд╡рд╛рдкрд░реВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕рдордзреНрдпреЗ рдирд╛рд╡рдиреЛрдВрджрдгреА рдХрд░рддрд╛рдирд╛ 10 рд░реВрдмрд▓ рд╕рд╡рд▓рдд.

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ: рдкреНрд░реЕрдХреНрдЯрд┐рдХрд▓ рдХреЛрд░реНрд╕ "рдореЛрдмрд╛рдЗрд▓ рдбреЗрд╡реНрд╣рд▓рдкрд░ рдкреНрд░реЛ".

рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдпреЗ рдлрд┐рд▓реНрдЯрд░ рдХрд░рдгреЗ

ARRAYS

рд╕реЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ ES6 рдордзреНрдпреЗ,..., рд╕реНрдкреНрд░реЗрдб рдСрдкрд░реЗрдЯрд░рд╕рд╣ рд╕рд╛рджрд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рд╣реЛрддрд╛, рдЖрдореНрд╣реА рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдирд╡реАрди рдЕреЕрд░реЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд░реВ рд╢рдХрддреЛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдлрдХреНрдд рдЕрдирдиреНрдп рдореВрд▓реНрдпреЗ рдЖрд╣реЗрдд.

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

рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддреАрдд, рд╕рдорд╛рди рдСрдкрд░реЗрд╢рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрдзрд┐рдХ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

рд╣реЗ рддрдВрддреНрд░ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЕреЕрд░реЗрд╕рд╛рдареА рдХрд╛рд░реНрдп рдХрд░рддреЗ: рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд, рд╢реВрдиреНрдп, рдмреБрд▓рд┐рдпрди, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдгрд┐ рд╕рдВрдЦреНрдпрд╛. рддреБрдореНрд╣реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдлрдВрдХреНрд╢рдиреНрд╕ рдХрд┐рдВрд╡рд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕреЕрд░реЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЕреЕрд░реЗрд╕рд╣ рдХрд╛рдо рдХрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдкрджреНрдзрддреАрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓.

рдЪрдХреНрд░рд╛рдВрдордзреНрдпреЗ рдХреЕрд╢реЗ рдЕреЕрд░реЗрдЪреА рд▓рд╛рдВрдмреА

рд╕рд╛рдпрдХрд▓

рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рд▓реВрдк рд╢рд┐рдХрддрд╛, рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдорд╛рдирдХ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛:

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

рддрдерд╛рдкрд┐, рдпрд╛ рд╡рд╛рдХреНрдпрд░рдЪрдирд╛рд╕рд╣, рдлреЙрд░ рд▓реВрдк рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдЪреНрдпрд╛ рдЕреЕрд░реЗрдЪреА рд▓рд╛рдВрдмреА рд╡рд╛рд░рдВрд╡рд╛рд░ рддрдкрд╛рд╕рддреЗ.

рдХрд╛рд╣реАрд╡реЗрд│рд╛ рд╣реЗ рдЙрдкрдпреБрдХреНрдд рдард░реВ рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдмрд╣реБрддреЗрдХ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ рдЕреЕрд░реЗрдЪреА рд▓рд╛рдВрдмреА рдХреЕрд╢реЗ рдХрд░рдгреЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдо рдЕрд╕рддреЗ, рдЬреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдд рдПрдХ рдкреНрд░рд╡реЗрд╢ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓. рдЖрдкрдг рд╣реЗ рд▓рд╛рдВрдмреА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрди рдХрд░реВ рд╢рдХрддреЛ рдЬреЗрдереЗ рдЖрдкрдг i рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЛ, рдЬрд╕реЗ:

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

рддрддреНрд╡рддрдГ, рдЬрд╡рд│рдЬрд╡рд│ рд╡рд░реАрд▓ рдкреНрд░рдорд╛рдгреЗрдЪ, рдкрд░рдВрддреБ рд▓реВрдкрдЪрд╛ рдЖрдХрд╛рд░ рд╡рд╛рдврд╡реВрди рдЖрдореНрд╣рд╛рд▓рд╛ рд╡реЗрд│реЗрдЪреА рд▓рдХреНрд╖рдгреАрдп рдмрдЪрдд рд╣реЛрдИрд▓.

рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рд░реЗрдЯрд┐рдВрдЧ (рдореЕрдХрдХрд╛рд░реНрдереА рд░реЗрдЯрд┐рдВрдЧ)

рд╕рд╢рд░реНрдд рдСрдкрд░реЗрдЯрд░

рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рд╣рд╛ рд╕реЛрдкрд╛ (рдЖрдгрд┐ рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдЗрддрдХрд╛ рд╕реЛрдкрд╛ рдирд╕рддреЛ) рд╕рд╢рд░реНрдд рд╡рд┐рдзрд╛рдиреЗ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдЬрд▓рдж рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдо рдорд╛рд░реНрдЧ рдЖрд╣реЗ:

x> 100? "100 рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд": "100 рдкреЗрдХреНрд╖рд╛ рдХрдореА";
x> 100? (x>200? "200 рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд": "100-200 рдЪреНрдпрд╛ рджрд░рдореНрдпрд╛рди"): "100 рдкреЗрдХреНрд╖рд╛ рдХрдореА";

рдкрд░рдВрддреБ рдХрд╛рд╣реАрд╡реЗрд│рд╛ рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХрддреЗрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЕрд╕рддреЛ. рддреНрдпрд╛рдРрд╡рдЬреА рдЖрдкрдг 'рдЖрдгрд┐' && рдЖрдгрд┐ 'рдХрд┐рдВрд╡рд╛' рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ || рдмреВрд▓рд┐рдпрди рдСрдкрд░реЗрдЯрд░ рдХрд╛рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдЪреЗ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрджреНрдзрддреАрдиреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. рдпрд╛рд▓рд╛ рд╕рд╣рд╕рд╛ "рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ" рдХрд┐рдВрд╡рд╛ "рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рд░реЗрдЯрд┐рдВрдЧ" рдореНрд╣рдгрддрд╛рдд.

рдпрд╛ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ

рд╕рдордЬрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдЕрдЯреАрдВрдкреИрдХреА рдПрдХрдЪ рдкрд░рдд рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ.

&& рд╡рд╛рдкрд░рд▓реНрдпрд╛рдиреЗ рдкрд╣рд┐рд▓реЗ рдЦреЛрдЯреЗ рдореВрд▓реНрдп рдорд┐рд│реЗрд▓. рдЬрд░ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдВрдбрдЪреЗ рдореВрд▓реНрдпрдорд╛рдкрди рд╕рддреНрдп рдЕрд╕реЗрд▓, рддрд░ рдореВрд▓реНрдпрдорд╛рдкрди рдХреЗрд▓реЗрд▓реА рд╢реЗрд╡рдЯрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдкрд░рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓.

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

рд╡рд╛рдкрд░рдгреЗ || рдкреНрд░рдердо рдЦрд░реЗ рдореВрд▓реНрдп рдкрд░рдд рдХрд░реЗрд▓. рдЬрд░ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдВрдбрдЪреЗ рдореВрд▓реНрдпрдорд╛рдкрди рдЕрд╕рддреНрдп рдЕрд╕реЗрд▓, рддрд░ рд╢реЗрд╡рдЯрдЪреЗ рдореВрд▓реНрдпрдорд╛рдкрди рдХреЗрд▓реЗрд▓реЗ рдореВрд▓реНрдп рдкрд░рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.

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

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде 1

рд╕рдордЬрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдЪреА рд▓рд╛рдВрдмреА рдкрд░рдд рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреНрдпрд╛рдЪрд╛ рдкреНрд░рдХрд╛рд░ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА.

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, foo рдпреЛрдЧреНрдп рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗ рд╣реЗ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА if/else рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛, рдкрд░рдВрддреБ рд╣реА рдкрджреНрдзрдд рдЦреВрдк рдореЛрдареА рдЕрд╕реВ рд╢рдХрддреЗ. рдореНрд╣рдгреВрди, рдЖрдордЪреЗ "рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ" рдШреЗрдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ.

return (foo || []).length;

рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ foo рдЪреА рдпреЛрдЧреНрдп рд▓рд╛рдВрдмреА рдЕрд╕рд▓реНрдпрд╛рд╕, рддреА рдкрд░рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓. рдЕрдиреНрдпрдерд╛ рдЖрдореНрд╣рд╛рд▓рд╛ 0 рдорд┐рд│реЗрд▓.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде 2

рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдд рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдорд╕реНрдпрд╛ рдЖрд▓реНрдпрд╛ рдЖрд╣реЗрдд? рдПрдЦрд╛рджреА рд╡рд╕реНрддреВ рдХрд┐рдВрд╡рд╛ рддреНтАНрдпрд╛рдЪреНтАНрдпрд╛ рдЙрдкрдЧреБрдгрд╛рдВрдкреИрдХреА рдПрдХ рдЕрд╕реНтАНрддрд┐рддреНтАНрд╡рд╛рдд рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рдХрджрд╛рдЪрд┐рдд рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдирд╕реЗрд▓ рдЖрдгрд┐ рдпрд╛рдореБрд│реЗ рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрдК рд╢рдХрддрд╛рдд.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНтАНрд╣рд╛рд▓рд╛ this.state рдордзреАрд▓ рдбреЗрдЯрд╛ рдкреНрд░реЙрдкрд░реНрдЯреАрдордзреНтАНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рд╛рдпрдЪрд╛ рд╣реЛрддрд╛, рдкрд░рдВрддреБ рдЬреЛрдкрд░реНрдпрдВрдд рдЖрдордЪрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлреЗрдЪ рд╡рд┐рдирдВрддреА рдкрд░рдд рдХрд░рдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд рдбреЗрдЯрд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдд рдирд╛рд╣реА.

рдЖрдореНрд╣реА рддреЗ рдХреБрдареЗ рд╡рд╛рдкрд░рддреЛ рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди, this.state.data рд╡рд░ рдХреЙрд▓ рдХреЗрд▓реНрдпрд╛рдиреЗ ре▓рдкреНрд▓рд┐рдХреЗрд╢рди рд╕реБрд░реВ рд╣реЛрдгреНрдпрд╛рд╕ рдкреНрд░рддрд┐рдмрдВрдз рд╣реЛрдК рд╢рдХрддреЛ. рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╣реЗ рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдордзреНрдпреЗ рдЧреБрдВрдбрд╛рд│реВ рд╢рдХрддреЛ:

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

"рдХрд┐рдВрд╡рд╛" рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░рдгреЗ рд╣рд╛ рдПрдХ рдЪрд╛рдВрдЧрд▓рд╛ рдкрд░реНрдпрд╛рдп рдЕрд╕реЗрд▓.

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

&& рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рд╡рд░реАрд▓ рдХреЛрдб рдмрджрд▓реВ рд╢рдХрдд рдирд╛рд╣реА. 'рдбреЗрдЯрд╛ рдЖрдгрдд рдЖрд╣реЗ' && this.state.data рдСрдкрд░реЗрдЯрд░ рд╣реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛ this.state.data рдкрд░рдд рдХрд░реЗрд▓.

рдкрд░реНрдпрд╛рдпреА рд╕рд╛рдЦрд│реА

рдПрдЦрд╛рджреНрдпрд╛ рдЭрд╛рдбрд╛рдЪреНрдпрд╛ рд╕рдВрд░рдЪрдиреЗрдд рдЦреЛрд▓рд╡рд░ рдорд╛рд▓рдорддреНрддрд╛ рдкрд░рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛ рдкрд░реНрдпрд╛рдпреА рд╕рд╛рдЦрд│реА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджрд┐рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рддрд░, рдкреНрд░рд╢реНрдирдЪрд┐рдиреНрд╣ рдЪрд┐рдиреНрд╣? рдЬрд░ рддреА рд╢реВрдиреНрдп рдирд╕реЗрд▓ рддрд░рдЪ рдорд╛рд▓рдорддреНрддрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣реА this.state.data?..() рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд░реАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреЗ рд░рд┐рдлреЕрдХреНрдЯрд░ рдХрд░реВ рд╢рдХрддреЛ. рдореНрд╣рдгрдЬреЗрдЪ, рдореВрд▓реНрдп рд╢реВрдиреНрдп рдирд╕рд▓реНрдпрд╛рд╕рдЪ рдбреЗрдЯрд╛ рдкрд░рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.

рдХрд┐рдВрд╡рд╛, рд░рд╛рдЬреНрдп рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рд╣рд╛. рд░рд╛рдЬреНрдп?. рдбреЗрдЯрд╛ рдкрд░рдд рдХрд░реВ рд╢рдХрддреЛ.

рдмреБрд▓рд┐рдпрдирдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛

рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг

рд╕рд╛рдорд╛рдиреНрдп рдмреБрд▓рд┐рдпрди рдлрдВрдХреНрд╢рдиреНрд╕ рдЯреНрд░реВ рдЖрдгрд┐ рдЕрд╕рддреНрдп рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, JavaScript рдЗрддрд░ рд╕рд░реНрд╡ рдореВрд▓реНрдпрд╛рдВрдирд╛ рд╕рддреНрдп рдХрд┐рдВрд╡рд╛ рдЕрд╕рддреНрдп рдорд╛рдирддреЗ.

рдЕрдиреНрдпрдерд╛ рд▓рдХреНрд╖рд╛рдд рдпреЗрдИрдкрд░реНрдпрдВрдд, JavaScript рдордзреАрд▓ рд╕рд░реНрд╡ рдореВрд▓реНрдпреЗ рд╕рддреНрдп рдЖрд╣реЗрдд, 0, "", null, undefined, NaN рдЖрдгрд┐ рдЕрд░реНрдерд╛рддрдЪ, рдЕрд╕рддреНрдп. рдирдВрддрд░рдЪреЗ рдЦреЛрдЯреЗ рдЖрд╣реЗрдд.

рдЖрдореНрд╣реА ! рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░реВрди рджреЛрдШрд╛рдВрдордзреНрдпреЗ рд╕рд╣рдЬрдкрдгреЗ рдЕрджрд▓рд╛рдмрджрд▓ рдХрд░реВ рд╢рдХрддреЛ, рдЬреЗ рдкреНрд░рдХрд╛рд░рд╛рд▓рд╛ рдмреБрд▓рд┐рдпрдирдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ.

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"

рд╣реА рдкрджреНрдзрдд рдмреВрд▓рд┐рдпрди рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░рд╛рд▓рд╛ рдирд┐рдпрдорд┐рдд рдЕрдВрдХреАрдп рдореВрд▓реНрдпрд╛рдВрдордзреНрдпреЗ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ, рдЦрд╛рд▓реА рджрд░реНрд╢рд╡рд┐рд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ:

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 рдЪреНрдпрд╛ рд╕рдорддреБрд▓реНрдп рдЖрд╣реЗ.

рдкреВрд░реНрдгрд╛рдВрдХрд╛рд╡рд░ рдлреНрд▓реЛрдЯ рдХрд░рд╛

рдСрдкрд░реЗрд╢рдиреНрд╕ / рдкреНрд░рдХрд╛рд░ рд░реВрдкрд╛рдВрддрд░рдг

рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдлреНрд▓реЛрдЯрд▓рд╛ рдкреВрд░реНрдгрд╛рдВрдХрд╛рдд рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░ рддреБрдореНрд╣реА 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>
      </>
    )
  }
};

рдЕреЕрд░реЗ рдЯреНрд░рд┐рдорд┐рдВрдЧ

ARRAYS

рддреБрдореНрд╣рд╛рд▓рд╛ рдЕреЕрд░реЗрдордзреВрди рдореВрд▓реНрдпреЗ рдХрд╛рдвреВрди рдЯрд╛рдХрд╛рдпрдЪреА рдЕрд╕рд▓реНрдпрд╛рд╕, splice() рдкреЗрдХреНрд╖рд╛ рд╡реЗрдЧрд╡рд╛рди рдкрджреНрдзрддреА рдЖрд╣реЗрдд.

рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдореВрд│ рдЕреЕрд░реЗрдЪрд╛ рдЖрдХрд╛рд░ рдорд╛рд╣рд┐рдд рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣реА рддреНрдпрд╛рдЪреА рд▓рд╛рдВрдмреА рдЧреБрдгрдзрд░реНрдо рдЦрд╛рд▓реАрд▓рдкреНрд░рдорд╛рдгреЗ рдУрд╡реНрд╣рд░рд░рд╛рдЗрдб рдХрд░реВ рд╢рдХрддрд╛:

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]

рдЕреЕрд░реЗрдЪреЗ рд╢реЗрд╡рдЯрдЪреЗ рдореВрд▓реНрдп рдореБрджреНрд░рд┐рдд рдХрд░рдгреЗ

ARRAYS
рдпрд╛ рддрдВрддреНрд░рд╛рд╕рд╛рдареА рд╕реНрд▓рд╛рдЗрд╕() рдкрджреНрдзрддреАрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.

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() рдкрджреНрдзрдд рджреЛрди рдкрд░реНрдпрд╛рдпреА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдШреЗрддреЗ: рдПрдХ рд░рд┐рдкреНрд▓реЗрд╕рд░ рдлрдВрдХреНрд╢рди, рдЬреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗрд▓реЗ JSON рдлрд┐рд▓реНрдЯрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЖрдгрд┐ рд╕реНрдкреЗрд╕ рд╡реНрд╣реЕрд▓реНрдпреВ.

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

рдПрд╡рдвреЗрдЪ, рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╣реА рд╕рд░реНрд╡ рддрдВрддреНрд░реЗ рдЙрдкрдпреБрдХреНрдд рд╣реЛрддреА. рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рдпреБрдХреНрддреНрдпрд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗрдд? рддреНрдпрд╛рдВрдирд╛ рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рд▓рд┐рд╣рд╛.

рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ:

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛