2020 рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреНрдпрд╛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди ( Nullish Coalescing ) TC39 рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдВрддрд┐рдо, рдЪреМрдерд╛ рдЪрд░рдг рд╣реИред


рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпреЗ рдФрд░ рдЕрдиреНрдп рдирд╡рд╛рдЪрд╛рд░ 2020, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЬрд╛рдПрдВрдЧреЗред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред


рдЖрдк рдпрд╣рд╛рдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ("2020 рд╕реБрд╡рд┐рдзрд╛рдПрдБ") - рд▓рдЧрднрдЧред рдЯреНрд░рд╛рдВрд╕ред



String.prototype.matchAll


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


String.prototyp.match рд╡реИрд╢реНрд╡рд┐рдХ рдзреНрд╡рдЬ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд┐рдП рдЧрдП рд╕рдореВрд╣реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдЖрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ рдЙрд╕рдХреЗ рд╕рдореВрд╣ рдХреЛ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдкреВрд░реНрдг рдорд┐рд▓рд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


let regexp = /t(e)(st(\d?))/g; let str = 'test1test2'; const results = str.match(regexp); console.log(results); 

рдкрд░рд┐рдгрд╛рдо "рдЭрдВрдбрд╛" рдХреЗ рд╕рд╛рде


рдзреНрд╡рдЬ рдХреЗ рдмрд┐рдирд╛ рдкрд░рд┐рдгрд╛рдо "рдЬреА"


String.prototype.matchAll рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдореИрдЪ рдФрд░ рдЙрдирдХреЗ рд╕рдореВрд╣ рд╡рд╛рдкрд╕ рдЖ рдЧрдП рд╣реИрдВред


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 let regexp = /t(e)(st(\d?))/g; let str = 'test1test2'; let array = [...str.matchAll(regexp)]; console.log(array); 

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



BigInt


BigInt рд╕реЗ рдкрд╣рд▓реЗ , рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдореВрд▓реНрдп 2 represented-1 (MAX_SAFE_INTEGER) рдерд╛ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдм рдПрдХ рдЖрджрд┐рдо рд╣реЛрдЧрд╛ рдЬреЛ рд╕реАрдорд╛ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред


рдЖрдк рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ 'n' рдЬреЛрдбрд╝рдХрд░ рдпрд╛ BigInt () рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ BigInt рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 let bigInt = 4n console.log(bigInt * bigInt) 

  • BigInt рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдХреЗ рд▓рд┐рдП рдбрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИред
  • рд╡рд┐рднрд╛рдЬрди рдЬреИрд╕реЗ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╕рдордп, рдкрд░рд┐рдгрд╛рдо рдирд┐рдХрдЯрддрдо рдкреВрд░реЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ред
  • рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдирдВрдмрд░ рдХреЗ рд╕рд╛рде BigInt рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ ...


 let bigInt = 4n + 2 console.log(bigInt) 

... рдПрдХ рдЕрдкрд╡рд╛рдж рдореЗрдВ рдкрд░рд┐рдгрд╛рдо:



globalThis


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


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 var getGlobal = function () { if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } if (typeof global !== 'undefined') { return global; } throw new Error('no global object found'); }; var globals = getGlobal(); 

GlobalThis рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде , рдЖрдк рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 globalThis.someFunction = () => 'hello' console.log(globalThis.someFunction()) 

Promise.allSettled


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рдХреБрдЫ рд╡рд╛рджреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рдпрд╣ рд╕рдлрд▓ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛)ред Promise.allSettled рдпрд╣ рдмрд╣реБрдд рд╣реА рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╣реИред


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 const fulfilledPromise = Promise.resolve("success"); const rejectedPromise = Promise.reject("error") const promises = [fulfilledPromise, rejectedPromise]; Promise.allSettled(promises). then((results) => results.forEach((result) => console.log(result))); 

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



рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд


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


рдпрд╣ рдЖрдпрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЬреЛ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛ред


рдПрдХ рдЙрджрд╛рд╣рд░рдг:


 import("some_module") .then(module => { module.doSomething(); }) .catch(err => { console.error(err.message); }); 

рд╕реНрдерд┐рд░ рдЖрдпрд╛рдд рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЧрддрд┐рд╢реАрд▓ рдЖрдпрд╛рдд рдХреЗ рджреМрд░рд╛рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд╛рд╕ рдХрд░реЗрдВред


рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрджрд╛рд╣рд░рдг:


 import(`${some_module}.js`) .then(module => { module.doSomething(); }) .catch(err => { console.error(err.message); }); 

рдирд╛рд▓рд┐рд╢ рд╕рд╣рд▓рд╛рдирд╛


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


Nullish рд╕реЗ рдкрд╣рд▓реЗ:


 const response = someResponse.properties.mayBeUndefined || 'Response'; 

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ "рдЧрд▓рдд" рдорд╛рди рд╣реИред


'||' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛:


 const someResponse = {properties: { mayBeUndefined: ''}} const response = someResponse.properties.mayBeUndefined || 'Response'; console.log(response) 

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


рдпрд╣ рдПрдХ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд╛рди рдЪрд╛рд╣рд┐рдПред

Nullish рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЗрд╡рд▓ рд╢реВрдиреНрдп рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


Nullish coalescing рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:


 const someResponse = {properties: { mayBeUndefined: ''}} const response = someResponse.properties.mayBeUndefined ?? 'Response'; console.log(response) 

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


рд╡реИрдХрд▓реНрдкрд┐рдХ рдЬрдВрдЬреАрд░


рдЙрдк-рд╡рд┐рд╢реЗрд╖рддрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдКрдкрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдореМрдЬреВрдж рд╣реИред рдЕрдм рддрдХ, рдкреНрд░рддреНрдпреЗрдХ рдЕрддрд┐-рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рди рд╕реЗ рдкрд╣рд▓реЗ:


 const someObj = { property: 'prop', otherProperty: { name: 'prop2' } }; const property = someObj.NotOtherProperty ? someObj.NotOtherProperty.name: undefined; console.log(property); 

рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдЖрдк '?' 'рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрдк-рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдПред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред


рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:


 const someObj = { property: 'prop', otherProperty: { name: 'prop2' } }; const property = someObj.NotOtherProperty?.name; console.log(property); 

рдСрдкреНрд╢рдирд▓ рдЪреЗрдирд┐рдВрдЧ рдХреЛрдб рдХреЛ рдЕрдзрд┐рдХ рдХреНрд▓реАрдирд░ рдмрдирд╛рддреА рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВред


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


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

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


All Articles