рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ ES2019 рдореЗрдВ рдирдпрд╛ рдХреНрдпрд╛ рд╣реИ

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдПрдХ рдкреВрд░реА рд╕рдорд┐рддрд┐ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреМрди рдХрд┐рд╕реА рдирдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдФрд░ ES2019 рдореЗрдВ рдХреНрдпрд╛ рдирдпрд╛ рд╣реИред

рдЫрд╡рд┐

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ ECMAScript рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рддрдХрдиреАрдХреА рд╕рдорд┐рддрд┐ 39 [TC39] рдирд╛рдордХ рдПрдХ рд╕рдореВрд╣ рд╣реИ, рдЬреЛ рдЧреЛрдж рд▓реЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ:

  • рд╕реНрдЯреЗрдЬ 0: рд╡рд┐рдЪрд╛рд░
  • рд╕реНрдЯреЗрдЬ 1: рдСрдлрд╝рд░
  • рдЪрд░рдг 2: рдбреНрд░рд╛рдлреНрдЯ
  • рдЪрд░рдг 3: рдЙрдореНрдореАрджрд╡рд╛рд░
  • рдЪрд░рдг 4: рдкреВрд░реНрдгрддрд╛ / рдЕрдиреБрдореЛрджрди

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЪрд░рдг 4 рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

ES2019 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

Array.prototypeред {рдлрд╝реНрд▓реИрдЯ, рдлрд╝реНрд▓реИрдЯрдореИрдк}


Array.prototyp.flat () рдЖрдкрдХреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдЧрд╣рд░рд╛рдИ рддрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЪрд┐рдХрдиреА рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рд╕рд┐рдВрдЯреИрдХреНрд╕: Array.prototype.flat (рдЧрд╣рд░рд╛рдИ)
рдЧрд╣рд░рд╛рдИ - рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 1 рд╣реИ, рд╕рднреА рдиреЗрд╕реНрдЯреЗрдб рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдиреНрдлрд┐рдирд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

const numbers = [1, 2, [3, 4, [5, 6]]]; // Considers default depth of 1 numbers.flat(); > [1, 2, 3, 4, [5, 6]] // With depth of 2 numbers.flat(2); > [1, 2, 3, 4, 5, 6] // Executes two flat operations numbers.flat().flat(); > [1, 2, 3, 4, 5, 6] // Flattens recursively until the array contains no nested arrays numbers.flat(Infinity) > [1, 2, 3, 4, 5, 6] 

Array.prototype.flatMap () рдореИрдкрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдирдП рд╕рд░рдгреА рдореЗрдВ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдореИрдк рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рдж 1 рдХреА рдЧрд╣рд░рд╛рдИ рддрдХ рдлреНрд▓реИрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕рд┐рдВрдЯреИрдХреНрд╕: Array.prototype.flatMap (рдХреЙрд▓рдмреИрдХ)
рдХреЙрд▓рдмреИрдХ: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдПрдХ рдирдП рд╕рд░рдгреА рдХреЗ рддрддреНрд╡ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред

 const numbers = [1, 2, 3]; numbers.map(x => [x * 2]); > [[2], [4], [6]] numbers.flatMap(x => [x * 2]); > [2, 4, 6] 

Object.fromEntries


Object.fromEntries Object.entries рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред

рд╕рд┐рдВрдЯреИрдХреНрд╕: Object.fromEntries (iterable)
рдкреБрдирд░рд╛рд╡реГрддрд┐: рд╕рд░рдгреА рдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ ред

 const records = [['name','Mathew'], ['age', 32]]; const obj = Object.fromEntries(records); > { name: 'Mathew', age: 32} Object.entries(obj); > [['name','Mathew'], ['age', 32]]; 

String.prototypeред {TrimStart, trimEnd}


trimStart () рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдФрд░ trimEnd () рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред

 const greeting = ` Hello Javascript! `; greeting.length; > 19 greeting = greeting.trimStart(); > 'Hello Javascript! ' greeting.length; > 18 greeting = 'Hello World! '; greeting.length; > 15 greeting = greeting.trimEnd(); > 'Hello World!' greeting.length; > 12 

рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрдХрдбрд╝ рдмрдВрдзрди


рдирдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдЕрдкрд╡рд╛рдж рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдХреИрдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред ES2019 рдиреЗ рдЗрд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛ рджрд┐рдпрд╛ред

 // Before try { ... } catch(error) { ... } // After try { ... } catch { ... } 

рдпрджрд┐ рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИред

рдХрдИ рдмрд╛рд░ рдЬрдм рдЖрдк рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╕рдордп рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИред рдФрд░ рдЖрдк рдХреИрдЪ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

JSON тКВ ECMAScript


рд▓рд╛рдЗрди рд╕реЗрдкрд░реЗрдЯрд░ рдХреИрд░реЗрдХреНрдЯрд░ (U + 2028) рдФрд░ рдкреИрд░рд╛ рд╕реЗрдкрд░реЗрдЯрд░ рдХреИрд░реЗрдХреНрдЯрд░ (U + 2029) рдЕрдм рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рдЯрд░рд▓реНрд╕ рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреА рдЧрдИ рд╣реИред рдкрд╣рд▓реЗ, рд╡реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЯрд░реНрдорд┐рдиреЗрдЯрд░ рдорд╛рдиреЗ рдЬрд╛рддреЗ рдереЗ рдФрд░ рд╕рд┐рдВрдЯреЗрдХреНрд╕рдПрдпрд░ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджреЗрддреЗ рдереЗред

 // Produces invalid string before ES2019 eval('"\u2028"'); // Valid in ES2019 eval('"\u2028"'); 

рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд JSON.stringify


рдПрдХрд▓ UTF-16 рдХреЛрдб рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рд╕рд░реЛрдЧреЗрдЯ рдХреЛрдб рдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рдмрдЬрд╛рдп, ES10 JSON рдПрд╕реНрдХреЗрдк рд╕реАрдХреНрд╡реЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред

 JSON.stringify('\uD800'); > '" "' JSON.stringify('\uD800'); > '"\\ud800"' 

Function.prototype.toString


.toString () рдЕрдм рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕рд╣рд┐рдд рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд╕рдЯреАрдХ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

 function /* a comment */ foo () {} // Previously: foo.toString(); > 'function foo() {}' ^ no comment ^ no space // Now: foo.toString(); > 'function /* comment */ foo () {}' 

Symbol.prototype.description


рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рдкреНрд░рддреАрдХ рд╡рд╕реНрддреБ рдХрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рд╡рд░рдг рд▓реМрдЯрд╛рддреА рд╣реИ:

 Symbol('desc').toString(); > "Symbol(desc)" Symbol('desc').description; > "desc" Symbol('').description; > "" Symbol().description; > undefined 

рдирд┐рд╖реНрдХрд░реНрд╖


рдХрдИ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдерд┐рд░ рдФрд░ рдирд┐рдЬреА рддрд░реАрдХреЗ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдлрд╝реАрд▓реНрдб, рд▓рд┐рдЧреЗрд╕реА RegEx, рдЖрджрд┐ред рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдирдИ рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЙрджреНрднрд╡ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛, рдкреБрд░рд╛рдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕реБрдзрд╛рд░рдирд╛ рдФрд░ рдХрд╛рдо рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛: ES2015 ES2016 ES2017 ES2018

Source: https://habr.com/ru/post/hi439532/


All Articles