EcmaScript 10 - рдЗрд╕ рд╕рд╛рд▓ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (ES2019)

рдЬреЗрдПрд╕ рдорд╛рдирдХреАрдХрд░рдг рдиреЗ рдПрдХ рд╡рд░реНрд╖ рдХреЗ рдЕрджреНрдпрддрди рдЪрдХреНрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрд╖ рдХреА рд╢реБрд░реБрдЖрдд рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдирджрд╛рд░ рд╕рдордп рд╣реИ рдХрд┐ рд╡рд░реНрд╖рдЧрд╛рдВрда рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЗрдВрддрдЬрд╛рд░ рд╣реИ - рдПрдХреНрдорд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рджрд╕рд╡рд╛рдВ рд╕рдВрд╕реНрдХрд░рдг!


рдИрдПрд╕ 9 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╣реИ ред


ES 10 рдЕрднреА рднреА рдПрдХ рдорд╕реМрджрд╛ рд╣реИ ред


рдЖрдЬ рддрдХ, рд╕реНрдЯреЗрдЬ 4 # рдореЗрдВ рдХреБрдЫ рд╕реБрдЭрд╛рд╡ рд╣реИрдВред


рдФрд░ рд╕реНрдЯреЗрдЬ 3 рдореЗрдВ - рдПрдХ рдкреВрд░реЗ рджрд░реНрдЬрди!


рдЗрдирдореЗрдВ рд╕реЗ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд░реНрдЧ рдХреЗ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ # , рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реЗрдмрдВрдЧ рд╡реНрдпрд╛рдХрд░рдг # , рдордирдорд╛рдиреА рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ # , рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рддрдХ рдкрд╣реБрдВрдЪ # рдФрд░ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд # ред



KDPV: рдореЙрдирд┐рдЯрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рд╢рд┐рд▓рд╛рд▓реЗрдЦ "JS ES10" рдХреЗ рд╕рд╛рде рдкреАрд▓рд╛ рдЪреБрдВрдмрдХ - kasper.green рдФрд░ elfafeya.art рд╕реЗ
рдлрд╝реЛрдЯреЛ рджреНрд╡рд╛рд░рд╛: kasper.green; рдкреАрд▓рд╛ рдЪреБрдВрдмрдХ: elfafeya.art рдФрд░ kasper.green


рд╕рд╛рдордЧреНрд░реА


рдкрд╛рдВрдЪ рдЪрд░рдг #


рдЪрд░рдг 4 - рдЕрдВрддрд┐рдо #


тАв catch - рддрд░реНрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛ рдЧрдпрд╛ рд╣реИ # ;


тАв Symbol().description - рдкреНрд░рддреАрдХ # рдХреЗ рд╡рд░реНрдгрди рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдЧрдордХрд░реНрддрд╛ ;


тАв ' EcmaScript' - JSON рдкреНрд░рд╛рд░реВрдк # рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╕рдВрдЧрддрддрд╛ ;


тАв .toString() - рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ # рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ ред


тАв Object.fromEntries() - рдЬреЛрдбрд╝реЗ рдХреА рдПрдХ рд╕рд░рдгреА рд╕реЗ рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛ - рдХреБрдВрдЬреА \ рдореВрд▓реНрдп # ;


тАв .flat() рдФрд░ .flatMap() рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк # рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ ред




рдЪрд░рдг 3 - рдкреВрд░реНрд╡-рд░рд┐рд▓реАрдЬрд╝ #


┬╖ - рдСрдХреНрдЯреЛрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рдирд┐рдЬреА рд╣реИ ;


тАв #!/usr/bin/env node - рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдХрд░рдг рд╡реНрдпрд╛рдХрд░рдг # ;


тАв BigInt() - рдПрдХ рдирдпрд╛ рдЖрджрд┐рдо, рдордирдорд╛рдирд╛ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП # ;


тАв globalThis - рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ # ;


тАв import(dynamic) - рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд # ;


тАв import.meta - рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА # ;


тАв JSON.stringify() - # рд╡рд┐рдзрд┐ рдХрд╛ рдлрд┐рдХреНрд╕ ;


тАв RegExp - рдкрджрд╛рд╡рдирдд рд╕реБрд╡рд┐рдзрд╛рдПрдБ # ;


тАв .trimStart() рдФрд░ .trimEnd() - рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдБ # ;


тАв .matchAll() - .match() рдЧреНрд▓реЛрдмрд▓ рдлреНрд▓реИрдЧ # рдХреЗ рд╕рд╛рде ;


рдкрд░рд┐рдгрд╛рдо #




рдкрд╛рдБрдЪ рдЕрд╡рд╕реНрдерд╛рдПрдБ


рд╕реНрдЯреЗрдЬ 0 be рд╕реНрдЯреНрд░реЙрдорди рдмрд╕реНрдЯрд┐рдВрдЧ рдПрдХ рдРрд╕рд╛ рд╡рд┐рдЪрд╛рд░ рдЬрд┐рд╕реЗ рдмреИрдмрд▓- рдкреНрд▓рдЧрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;


рдЪрд░рдг 1 1 рд╡рд┐рдЪрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░реНрдпрддрд╛ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рддреНрдпрд╛рдкрди ред;


рдЪрд░рдг 2 specification рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдбреНрд░рд╛рдлреНрдЯ рдбреНрд░рд╛рдлрд╝реНрдЯ рдкреНрд░рд╛рд░рдВрдн ред;


рдЪрд░рдг 3 3 рдЙрдореНрдореАрджрд╡рд╛рд░ рдЙрдореНрдореАрджрд╡рд╛рд░ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛;


рдЪрд░рдг 4 ╓Н рд╕рдорд╛рдкреНрдд рдЗрд╕ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред




рд╣рдо рдХреЗрд╡рд▓ рдЪрд░рдг 4 рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХред


рдФрд░ рд╕реНрдЯреЗрдЬ 3 - рдЬреЛ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред





╓Н рд╕реНрдЯреЗрдЬ 4


рдпреЗ рдкрд░рд┐рд╡рд░реНрддрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирдХ рд╣реИрдВред


рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рдХреЛ catch


https://github.com/tc39/proposal-optional-catch-binding


рдИрдПрд╕ 10 рд╕реЗ рдкрд╣рд▓реЗ, catch рдХреЛ рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рднрд▓реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ:


 function isValidJSON(text) { try { JSON.parse(text); return true; } catch(unusedVariable) { //    return false; } } 


рдПрдЬ рдХреЛ рдЕрднреА рддрдХ ES 10 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред


ES 10 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдХреЛрд╖реНрдардХ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ catch рдХреА try рддрд░рд╣ рдкрд╛рдиреА рдХреА рджреЛ рдмреВрдВрджреЛрдВ рдХреА рддрд░рд╣ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред



рдореЗрд░рд╛ Chrome рдкрд╣рд▓реЗ рд╣реА ES 10 рдФрд░ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕реНрдЯреЗрдЬ 3 рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рдЖрдЧреЗ рдХреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреНрд░реЛрдо рд╕реЗ рд╣реЛрдВрдЧреЗ


рд╕реНрд░реЛрдд рдХреЛрдб
 function isValidJSON(text) { try { JSON.parse(text); return true; } catch { //   return false; } } 



рдПрдХреНрд╕реЗрд╕ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рд╡рд┐рд╡рд░рдг


https://tc39.imtqy.com/proposal-Symbol-description/


рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рд╡рд┐рд╡рд░рдг рдХреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ (ред) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 const symbol_link = Symbol("Symbol description") String(symbol_link) // "Symbol(Symbol description)" 

рдИрдПрд╕ 10 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рд╡рд░рдг рд╕рдВрдкрддреНрддрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдиреГрддреНрдп рдХреЗ рдкреНрд░рддреАрдХ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:


 symbol_link.description // "Symbol description" 

рдпрджрд┐ рд╡рд┐рд╡рд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ - undefined :


 const without_description_symbol_link = Symbol() without_description_symbol_link.description // undefined const empty_description_symbol_link = Symbol('') empty_description_symbol_link.description // "" 



EcmaScript рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ JSON рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд


https://github.com/tc39/proposal-json-superset


EcmaScript, рдЕрдкрдиреЗ рджрд╕рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ, рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ JSON JSON.parse рд╕рдмрд╕реЗрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред


JSON рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдмрд┐рдирд╛ рддрд╛рд░ рд╡рд╛рд▓реА рд▓рд╛рдЗрди рд╕реЗрдкрд░реЗрдЯрд░ U+2028 LINE SEPARATOR рдФрд░ рдкреИрд░рд╛рдЧреНрд░рд╛рдл U+2029 PARAGRAPH SEPARATOR рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред


ECMAScript рдХреА рджрд╕рд╡реАрдВ рд╕рдВрд╕реНрдХрд░рдг рддрдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ - рдирд╣реАрдВред


рдпрджрд┐ рдЖрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ "\u2029" eval() "\u2029" ,
рдпрд╣ рдРрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдорд╛рдиреЛ рд╣рдордиреЗ рдПрдХ рд▓рд╛рдЗрди рдмреНрд░реЗрдХ рдХрд┐рдпрд╛ рд╣реЛ - рдХреЛрдб рдХреЗ рдареАрдХ рдмреАрдЪ рдореЗрдВ:




ES 10 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде - рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ:





рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╢реЛрдзрди .toString() рд╡рд┐рдзрд┐


http://tc39.imtqy.com/Function-prototype-toString-revision/


рд▓рдХреНрд╖реНрдп рдмрджрд▓реЗрдВ
  • рдкрд┐рдЫрдбрд╝реА рдЕрд╕рдВрдЧрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреВрд░ рдХрд░реЗрдВ:

рдпрджрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрди рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП eval рдПрдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред

  • рдПрдХ "рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рдордХрдХреНрд╖" рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ;


  • рдирд┐рд░реНрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдореЗрдЬрдмрд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░реЗрдВ;


  • рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ" рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛;


  • рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рдореВрд▓ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реВрдЪреА рд╣реИ;


  • ECMAScript рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, toString рдХреЛ рдкрд╣рд▓реЗ рдХреЗ рдЯреЛрдХрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЯреЛрдХрди рдХреЗ рд╕рдорддреБрд▓реНрдп рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрд░реЛрдд рдХреЗ рдкрд╛рда рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП;


  • рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореВрд▓ рдирд┐рд╡рд╛рд╕реА;


  • ECMAScript рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЙрдирдХреЗ рд▓рд┐рдП NativeFunction рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛;


  • рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП (рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░) рдХреЛ рд╕реНрд░реЛрдд рдкрд╛рда рдХреЛ рд╕рдВрд╢реНрд▓реЗрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП;


  • рдЕрдиреНрдп рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП, toString рдХреЛ TypeError рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред



 //   function () { console.log('My Function!'); }.toString(); // function () { console.log('My Function!'); } //     Number.parseInt.toString(); // function parseInt() { [native code] } //     function () { }.bind(0).toString(); // function () { [native code] } //     Symbol.toString(); // function Symbol() { [native code] } //     Function().toString(); // function anonymous() {} //    - function* () { }.toString(); // function* () { } // .call   ,   ,  Function.prototype.toString.call({}); // Function.prototype.toString requires that 'this' be a Function" 



Object.fromEntries() рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛


https://github.com/tc39/proposal-object-from-entries


рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


_.fromPairs рд╕реЗ lodash рдХрд╛ рдПрдирд╛рд▓реЙрдЧ:


 Object.fromEntries([['key_1', 1], ['key_2', 2]]) // {key_1: 1; key_2: 2} 



.flat() рдФрд░ .flatMap() рд╕рд╛рде рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпрд╛рдБ


https://github.com/tc39/proposal-flatMap


рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рд╕рд░рдгреА рдиреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ .flat() рдФрд░ .flatMap() , рдЬреЛ рдЖрдо рддреМрд░ рдкрд░ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдХреБрдЫ рдЕрдВрддрд░ рд╣реИрдВред рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ - рдЕрдзрд┐рдХрддрдо рдкреЗрдбрд╝ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:


 const deep_deep_array = [ 'тЙе0 тАФ  ', [ 'тЙе1 тАФ  ', [ 'тЙе2 тАФ  ', [ 'тЙе3 тАФ  ', [ 'тЙе4 тАФ  ' ] ] ] ] ] // 0 тАФ     deep_deep_array.flat(0) //  ["тЙе0 тАФ  ", Array(2)] // 1 тАФ    deep_deep_array.flat() //  [" ", " ", Array(2)] deep_deep_array.flat(2) //  [" ", " ", " ", Array(2)] deep_deep_array.flat(100500) // [" ", " ", " ", " ", " "] 

.flatMap() рд▓рдЧрд╛рддрд╛рд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ .flatMap() .map().flat() ред рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлреНрд▓реИрдЯ рд╕рд░рдгреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЬрд╛рдПрдЧрд╛:


 ['Hello', 'World'].flatMap(word => [...word]) // ["H", "e", "l", "l", "o", "W", "o", "r", "l", "d"] 

рдХреЗрд╡рд▓ .flat() рдФрд░ .flat() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


  ['Hello', 'World'].map(word => [...word]).flat() // ["H", "e", "l", "l", "o", "W", "o", "r", "l", "d"] 

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ .flatMap() , .flatMap() рдХреЗ рд╡рд┐рдкрд░реАрдд .flat() рдХреНрд░реЙрд▓ рдЧрд╣рд░рд╛рдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдкрд░ рд╣реА рдирдЬрд░ рд░рдЦреА рдЬрд╛рдПрдЧреАред







╓Н рд╕реНрдЯреЗрдЬ 3


рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреЛ рдорд╕реМрджрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЙрднрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдорд╛рдирдХ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред


рдирд┐рдЬреА \ рд╕реНрдерд┐рд░ \ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рддрд░реАрдХреЗ \ рдЧреБрдг \ рдЧреБрдг рд╡рд░реНрдЧреЛрдВ рдХреА


https://github.com/tc39/proposal-class-fields
https://github.com/tc39/proposal-private-methods
https://github.com/tc39/proposal-static-class-features


рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдирд┐рдЬреА рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИ (" _ " - рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛, рдЖрдк рдЗрд╕ рдирд╛рдо рдХреЛ рдЧрд▓рдд рдирд╛рдо рдХреЗ рдиреАрдЪреЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ - рдЕрдВрдбрд░рд╕реНрдХреЛрд░) ред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:


 <?php class AdultContent { private $_age = 0; private $_content = 'тАжis dummy example content (тАв)(тАв) тАФ3 (.)(.) only for adultsтАж'; function __construct($age) { $this->_age = $age; } function __get($name) { if($name === 'content') { return " (age: ".$this->_age.") тЖТ ".$this->_getContent()."\r\n"; } else { return 'without info'; } } private function _getContent() { if($this->_contentIsAllowed()) { return $this->_content; } return 'Sorry. Content not for you.'; } private function _contentIsAllowed() { return $this->_age >= 18; } function __toString() { return $this->content; } } echo "<pre>"; echo strval(new AdultContent(10)); // (age: 10) тЖТ Sorry. Content not for you echo strval(new AdultContent(25)); // (age: 25) тЖТ тАжis dummy example content (тАв)(тАв) тАФ3 only for adultsтАж $ObjectAdultContent = new AdultContent(32); echo $ObjectAdultContent->content; // (age: 32) тЖТ тАжis dummy example content (тАв)(тАв) тАФ3 only for adultsтАж ?> 

рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ - рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИред рдЕрдиреНрдп рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ, рдпрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИред


рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ this рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рд╕реНрдерд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


EcmaScript рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЖрдЧреЗ рдмрдврд╝рдХрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрд╕рд░реНрдЧ- рдСрдХреНрдЯреЛрдЯрд░рдк (" # " -рд▓реЙрдЯрд┐рд╕, рд╣реИрд╢) рдмрдирд╛рдпрд╛ ред


ES 10 рдкрд░ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 export default class AdultContent { //    #age = 0 #adult_content = 'тАжis dummy example content (тАв)(тАв) тАФ3 (.)(.) only for adultsтАж' constructor(age) { this.#setAge(age) } //    static #userIsAdult(age) { return age > 18 } //   get content () { return `(age: ${this.#age}) тЖТ ` + this.#allowed_content } //   get #allowed_content() { if(AdultContent.userIsAdult(this.age)){ return this.#adult_content } else { return 'Sorry. Content not for you.' } } //   #setAge(age) { this.#age = age } toString () { return this.#content } } const AdultContentForKid = new AdultContent(10) console.log(String(AdultContentForKid)) // (age: 10) тЖТ Sorry. Content not for you. console.log(AdultContentForKid.content) // (age: 10) тЖТ Sorry. Content not for you. const AdultContentForAdult = new AdultContent(25) console.log(String(AdultContentForAdult)) // (age: 25) тЖТ тАжis dummy example content (тАв)(тАв) тАФ3 (.)(.) only for adultsтАж console.log(AdultContentForAdult.content) // (age: 25) тЖТ тАжis dummy example content (тАв)(тАв) тАФ3 (.)(.) only for adultsтАж 

рдирд┐рдЬреА рдЧреБрдгреЛрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, JS - PHP рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкрдиреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд╕рд╛рде рдЖрдВрдЦ рдХреЛ рдкреНрд░рд╕рдиреНрди рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рдирд┐рдЬреА рдлрд╝рдВрдХреНрд╢рди _... рдЖрдкрдХреЗ рд▓рд┐рдП, рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреЛрдИ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдирд╣реАрдВ рд╣реИ, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рддрдХ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП "->" рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдмрд┐рдВрджреБред


рдирд╛рдо рд░рдЦрдиреЗ рд╡рд╛рд▓реЗред рдЧрддрд┐рд╢реАрд▓ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯред


рдпрд╣ trifles рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди JS рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, PHP рдореЗрдВ рд▓реМрдЯрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХрдо рдФрд░ рдХрдо рд╣реЛрддреА рд╣реИред


рд╡реИрд╕реЗ, рдирд┐рдЬреА рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЗрд╡рд▓ рдмреЗрдмрд▓ 7.3.0 рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред


рд▓реЗрдЦрди рдХреЗ рд╕рдордп, npmjs.com рдХрд╛ рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг 7.2.2 рд╣реИ


рд╕реНрдЯреЗрдЬ 4 рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рджреЗрдЦ!




рд╢реЗрдмрдВрдЧ рдЧреНрд░рд╛рдорд░


https://github.com/tc39/proposal-hashbang


рд╣реИрд╢рдмреИрдВрдЧ рдПрдХ рддрд░рд╣ рд╕реЗ рдпреВрдирд┐рдХреНрд╕ рдПрдХ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рджреБрднрд╛рд╖рд┐рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИ:


 #!/usr/bin/env node //   'use strict'; console.log(1); 

 #!/usr/bin/env node //   export {}; console.log(1); 

SyntaxError: Invalid or&nbsp;unexpected token Chrome рдПрдХ SyntaxError: Invalid or&nbsp;unexpected token рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реИ SyntaxError: Invalid or&nbsp;unexpected token рдПрдХ рд╕рдорд╛рди SyntaxError: Invalid or&nbsp;unexpected token рдкрд░ SyntaxError: Invalid or&nbsp;unexpected token


BigInt рдХреЗ рд╕рд╛рде рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛


https://github.com/tc39/proposal-bigint


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдерди

BigInt () рдЖрджрд┐рдо рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди


рдЕрдзрд┐рдХрддрдо рдкреВрд░реНрдгрд╛рдВрдХ рдЬрд┐рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (2 1 - 1):


 console.log(Number.MAX_SAFE_INTEGER) // 9007199254740991 

рдмрд┐рдЧрдЖрдИрдВрдЯ рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХрдИ рддрд░рд╣ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


 //  'n'       910000000000000100500n // 910000000000000100500n //      BigInt()   BigInt( 910000000000000200500 ) // 910000000000000200500n //     -  BigInt( "910000000000000300500" ) // 910000000000000300500n //      1642  BigInt( "" ) \\ 

рдпрд╣ рдПрдХ рдирдпрд╛ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рд╣реИ:


 typeof 123; // тЖТ 'number' typeof 123n; // тЖТ 'bigint' 

рдЗрд╕рдХреА рддреБрд▓рдирд╛ рд╕рд╛рдзрд╛рд░рдг рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:


 42n === BigInt(42); // тЖТ true 42n == 42; // тЖТ true 

рд▓реЗрдХрд┐рди рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:


 20000000000000n/20n // 1000000000000n 20000000000000n/20 // Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions 

рдпреВрдирд░реА рдорд╛рдЗрдирд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпреВрдирд░реА рдкреНрд▓рд╕ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ:


  -2n // -2n +2n // Uncaught TypeError: Cannot convert a BigInt value to a number 


globalThis - рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛


https://github.com/tc39/proposal-global


рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рдЪреВрдВрдХрд┐ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдХреЛрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЬрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд░рдирд╛ рдерд╛:


 var getGlobal = function () { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } throw new Error('unable to locate global object'); }; 

рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдиреЗ рднреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреА рдХрд┐ рд╕рдм рдХреБрдЫ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред


globalThis рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╣реИ:


 //      globalThis.Array(1,2,3) // [1, 2, 3] //        globalThis.myGLobalSettings = { it_is_cool: true } //        globalThis.myGLobalSettings // {it_is_cool: true} 



рдЧрддрд┐рд╢реАрд▓ import(dynamic)


https://github.com/tc39/proposal-dynamic-import


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдерди

рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди


рдореИрдВ рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдЪрд░ рдЪрд╛рд╣рддрд╛ рдерд╛, рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛:


 import(`./language-packs/${navigator.language}.js`) 

рдбрд╛рдпрдирд╛рдорд┐рдХ рдЗрдореНрдкреЛрд░реНрдЯ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рд╣реИред рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд▓реМрдЯрддрд╛ рд╣реИред


рдЗрд╕рд▓рд┐рдП, рдЖрдк рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЖрд╕реНрдердЧрд┐рдд:


 element.addEventListener('click', async () => { //   await    const module = await import(`./events_scripts/supperButtonClickEvent.js`) module.clickEvent() }) 

рд╕рд┐рдВрдереЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ import() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрдВрдХреНрд╢рди.рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ call рдпрд╛ apply рдорд╛рдзреНрдпрдо рд╕реЗ call рдореЗрдВ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛:


 import.call("example this", "argument") // Uncaught SyntaxError: Unexpected identifier 



import.meta - рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реАред


https://github.com/tc39/proposal-import-meta


рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рд▓реЛрдб рдХрд┐рдП рдЧрдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХреЛрдб рдореЗрдВ, рдЙрд╕ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╣ рдкрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:


 console.log(import.meta); // { url: "file:///home/user/my-module.js" } 



JSON.stringify() рд╡рд┐рдзрд┐ JSON.stringify()


https://github.com/tc39/proposal-well-formed-stringify


RFC 8259 рдХреА рдзрд╛рд░рд╛ 8.1 рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ JSON рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдмрдВрдж рдХрд┐рдП рдЧрдП рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХ рддрдВрддреНрд░ рдХреЗ рдмрд╛рд╣рд░ UTF-8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди JSON.stringify рдЙрди рд╕реНрдЯреНрд░реЗрдВрде рдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ UTF-8 (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рд░реЛрдЧреЗрдЯ рдХреЛрдб рдкреЙрдЗрдВрдЯреНрд╕) рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред U + D800 рд╕реЗ U + DFFF)


рддреЛ JSON.stringify () рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж рд▓рд╛рдЗрди \uDF06\uD834 \\udf06\\ud834 рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ:


 /*         */ JSON.stringify('\uDF06\uD834') '"\\udf06\\ud834"' JSON.stringify('\uDEAD') '"\\udead"' 

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




рдкрджрд╛рд╡рдирдд RegExp рд╕реБрд╡рд┐рдзрд╛рдПрдБ


https://github.com/tc39/proposal-regexp-legacy-features


RegExp.$1 , рдФрд░ RegExp.prototype.compile() рд╡рд┐рдзрд┐ RegExp.prototype.compile() ред




рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ .trimStart() рдФрд░ .trimEnd()


https://github.com/tc39/proposal-string-left-right-trim


рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ .padStart() рдФрд░ .padEnd() , рдХреНрд░рдорд╢рдГ рд▓рд╛рдЗрди рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдореЗрдВ .padEnd() рдХрд╛рдЯреЗрдВ:


 const one = " hello and let "; const two = "us begin. "; console.log( one.trimStart() + two.trimEnd() ) // "hello and let us begin." 



.matchAll () рдПрдХ рдирдИ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╣реИред


https://github.com/tc39/proposal-string-matchall


рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


g рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде .match() рд╡рд┐рдзрд┐ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ .match() рджреЗрддрд╛ рд╣реИ:


 const string_for_searh = 'olololo' //         string_for_searh.match(/o/) // ["o", index: 0, input: "olololo", groups: undefined] //       string_for_searh.match(/o/g) // ["o", "o", "o", "o"] //   string_for_searh.matchAll(/o/) // {_r: /o/g, _s: "olololo"} //        , //      .match    for(const item of string_for_searh.matchAll(/o/)) { console.log(item) } // ["o", index: 0, input: "olololo", groups: undefined] // ["o", index: 2, input: "olololo", groups: undefined] // ["o", index: 4, input: "olololo", groups: undefined] // ["o", index: 6, input: "olololo", groups: undefined] 

рддрд░реНрдХ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:


 'olololo'.matchAll('o') // Uncaught TypeError: o is not a regexp! 







рдкрд░рд┐рдгрд╛рдо


рд╕реНрдЯреЗрдЬ 4 рдореЗрдВ рдФрд░ рднреА рдХреЙрд╕реНрдореЗрдЯрд┐рдХ рдмрджрд▓рд╛рд╡ рдЖрдПред рдмреНрдпрд╛рдЬ рд╕реНрдЯреЗрдЬ 3 рд╣реИ ред рдХреНрд░реЛрдо рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реБрдЭрд╛рд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИрдВ, рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреБрдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдЧреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВред






рд▓реЗрдЦ рдореЗрдВ рд╕реБрдзрд╛рд░



рдпрджрд┐ рдЖрдкрдиреЗ рд▓реЗрдЦ рдореЗрдВ рдХреЛрдИ рдЕрд╢реБрджреНрдзрд┐, рддреНрд░реБрдЯрд┐ рджреЗрдЦреА рд╣реИ, рдпрд╛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИ, рддреЛ рдЖрдк рдореБрдЭреЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рдВрджреЗрд╢ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ , рд▓реЗрдХрд┐рди рд▓реЗрдЦ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА https://github.com/KasperGreen/es10 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╕рдХреНрд░рд┐рдп рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЗрдбреАрдкреАрд╡реА рдХреЗ рд╕рд╛рде рдкреАрд▓реЗ рдЪреБрдВрдмрдХ-рдкрджрдХ рдХрд╛ рдкреБрд░рд╕реНрдХрд╛рд░ рджреВрдВрдЧрд╛ред


рд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА


рд╕рд╛рдордЧреНрд░реА рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ Ecma-262 рдорд╛рдирдХ рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг


рд╕рд╛рдордЧреНрд░реА рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ Ecma-262 рдорд╛рдирдХ рдХреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдбреНрд░рд╛рдлреНрдЯ


ECMAScript


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирдП # рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░


рд╣реИрдмреЗ рдкрд░ рд▓реЗрдЦ ES7, ES8 рдФрд░ ES9 рдорд╛рдирдХреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди


рдХреБрдЯрд┐рдпрд╛


рд╣реИрдмреЗ рдкрд░ рд▓реЗрдЦ рдмрд┐рдЧрдЖрдИрдВрдЯ - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рдВрдмреА рдЕрдВрдХрдЧрдгрд┐рдд


рд╣реИрдмреЗ рдкрд░ рд▓реЗрдЦ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЙрдбреНрдпреВрд▓ рдкрде


рд╕рд╛рдордЧреНрд░реА рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдирд┐рдЬреА рдПрдХреНрд╕


рд╣реИрдмреЗ рдкрд░ рд▓реЗрдЦ ECMAScript рдкреНрд░рд╕реНрддрд╛рд╡: Array.prototypeред {рдлрд╝реНрд▓реИрдЯ, рдлрд╝реНрд▓реИрдЯрдореИрдк}


рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдмрд┐рдЧ рд╣реЛрд▓ рдкреВрд░рд╛ рдХреНрдпреЛрдВ




рдпреВрдкреАрдбреА (рдорд╛рд░реНрдЪ):


рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдЯреЗрдЬ рдореЗрдВ рдмрджрд▓рд╛ - 4 :


тАв .trimStart() рдФрд░ .trimEnd() - рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпрд╛рдБ # ;


тАв .matchAll() - .match() рдЧреНрд▓реЛрдмрд▓ рдлреНрд▓реИрдЧ # рдХреЗ рд╕рд╛рде ;


рд╡реИрдХрд▓реНрдкрд┐рдХ KDPV elfafeya.art рд╕реЗ рдкреАрд▓реЗ рдЪреБрдВрдмрдХ рдХреЗ рд╕рд╛рде
рдлрд╝реЛрдЯреЛ рджреНрд╡рд╛рд░рд╛: kasper.green; рдкреАрд▓рд╛ рдЪреБрдВрдмрдХ: elfafeya.art рдФрд░ kasper.green

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


All Articles