рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ES7 рдЕрд╡рд▓реЛрдХрди1. рд╡рд╕реНрддреБ2. рд╡рд╕реНрддреБ3. String.prototyp.padEnd4. String.prototype.padStart5. Object.getOwnPropertyDescriptor6. рдЕрдиреБрдЧрд╛рдореА рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо7. рд╢рд╛рд░рджрд╛рдЕрд░реЗрдмрдлрд╝рд░8. рдПрдЯрд┐рдХреНрд╕9. рдЖрд╕рди рдХрд╛рд░реНрдпрдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдирдорд╕реНрдХрд╛рд░, рдЕрддреАрдд рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА ES6 рдореЗрдВ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЕрдм ES8 рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рдирдИ рдЪреАрдЬреЗрдВ рд▓реЗрдХрд░ рдЖрдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдИрдПрд╕ 7 (2016) рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдирд╣реАрдВ рдорд╛рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд┐рд▓реАрдЬ рдХреЗрд╡рд▓ 2 рдирд╡рд╛рдЪрд╛рд░ рд▓реЗрдХрд░ рдЖрдИред рдпрд╣ Array.prototype.includes () рдФрд░ рдШрд╛рддрд╛рдВрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, ES8 рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП ES7 рдХреЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВред
ES7 рдЕрд╡рд▓реЛрдХрди
рд╢рд╛рдорд┐рд▓ () рд╡рд┐рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрддреНрд╡ рд╣реИ, рдЬреЛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рд╣реИред
Array.prototype.includes(searchElement[, fromIndex = 0]) : Boolean
searchElement - рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЗрдЯрдоред
fromIndex - рд╕рд░рдгреА рдореЗрдВ рд╡рд╣ рд╕реНрдерд┐рддрд┐ рдЬрд╣рд╛рдБ рд╕реЗ рдЦреЛрдЬ рддрддреНрд╡ рдХреЛ рдЦреЛрдЬрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдирдХрд╛рд░рд╛рддреНрдордХ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП, рдЦреЛрдЬ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ array.length + fromIndex рдЖрд░реЛрд╣реА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди 0 рд╣реИред
рдЙрджрд╛рд╣рд░рдг [1, 2, 3].includes(2);
рд╢рд╛рдорд┐рд▓ рд╣реИрдВ () рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА рдЬреИрд╕реА рд╡рд╕реНрддреБрдПрдВ)ред рдЙрджрд╛рд╣рд░рдг: рдХрд┐рд╕реА рддрд░реНрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╢рд╛рдорд┐рд▓ () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
(function() { console.log([].includes.call(arguments, 'a'));
рдкреНрд░рддрд┐рдкрд╛рджрдХ рдСрдкрд░реЗрдЯрд░ (**) рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдХреНрддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдкреНрд░рддрд┐рдкрд╛рджрдХ рдмреАред B рдХреА рд╢рдХреНрддрд┐ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реБрдПред
a ** b
рдЙрджрд╛рд╣рд░рдг 2 ** 3
1. рд╡рд╕реНрддреБ
Object.entries () рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рддрддреНрд╡ рдПрдПрдордпреВ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдг [рдХреБрдВрдЬреА, рдорд╛рди] рдЬреЛрдбрд╝реЗ рдХреЗ рд╕реАрдзреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЧреБрдгреЛрдВ рдХрд╛ рдХреНрд░рдо рд╡рд╣реА рд╣реИ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
Object.entries(obj) : Array
obj - рдПрдХ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдХрд╛ рдЧреБрдг рдЧреБрдг рдПрдХ рд╕рд░рдгреА [рдХреБрдВрдЬреА, рдорд╛рди] рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
Object.entries () рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдЧреБрдгреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ ... рд▓реВрдк рдореЗрдВ (рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдлреЙрд░-рдЗрди рднреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИ)ред рд╕рд░рдгреА рдореЗрдВ рддрддреНрд╡реЛрдВ рдХрд╛ рдХреНрд░рдо рдЬреЛ Object.entries () рд░рд┐рдЯрд░реНрди рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд░рдгреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг var obj = { foo: "bar", baz: 42 }; console.log(Object.entries(obj));
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореИрдк рдореЗрдВ рдХрдиреНрд╡рд░реНрдЯ рдХрд░реЗрдВрдирдпрд╛ рдореИрдк () рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд╛рдиреЛрдВ рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред Object.entries рдХреЗ рд╕рд╛рде, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдореИрдк рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ 2 рддрддреНрд╡ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдЪрд╛рдмрд┐рдпрд╛рдБ рдХреЗрд╡рд▓ рддрд╛рд░ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
var obj = { foo: "bar", baz: 42 }; var map = new Map(Object.entries(obj)); console.log(map);
рдХреНрдпреЛрдВ Object.entries () рдПрдХ рд╕рд░рдгреА рдФрд░ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рдХреА рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╣реИ?
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ Object.keys () рд╣реИ, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Map.prototype.entries ()ред
рдХреНрдпреЛрдВ Object.entries () рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рджреЗрд╢реА рдЧреБрдг рд▓реМрдЯрд╛рддрд╛ рд╣реИ
рдлрд┐рд░ рд╕реЗ, рдпрд╣ Object.keys () рд╕реЗ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЙрди рдЧреБрдгреЛрдВ рдХреЛ рднреА рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░рддреА рд╣реИ рдЬрд┐рдирдХреА рдХреБрдВрдЬреА рд╡рд░реНрдг рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рдПрдХ Reflect.ownEntries () рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ , рд╕рд╛рде рд╣реА рдПрдордбреАрдПрди
рд╡реЗрдм рдбреЙрдХреНрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рджреЗрдЦреЗрдВред
2. рд╡рд╕реНрддреБ
Object.values тАЛтАЛ() рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рддрддреНрд╡ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЧреБрдг рдХреЗ рдорд╛рди рд╣реИрдВред рдСрд░реНрдбрд░ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЖрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рд╛рдЗрдХрд┐рд▓ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
Object.values(obj) : Array
obj - рдПрдХ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдХреЗ рдкреНрд░рдЧрдгрд┐рдд рдЧреБрдгреЛрдВ рдХрд╛ рдорд╛рди рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред
Object.values тАЛтАЛ() рд╡рд┐рдзрд┐ рд▓реВрдк рдореЗрдВ ... рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред рдПрдХ рд▓реВрдк рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рд▓реВрдк рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг var obj = { foo: "bar", baz: 42 }; console.log(Object.values(obj));
Object.entries рдФрд░ Object.values тАЛтАЛ() рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдФрд░ рдореВрд▓реНрдп рд╡рд╛рд▓реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ рдХреЗрд╡рд▓ рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
Object.values тАЛтАЛ() рдФрд░ Object.entries () рдХреЗ рдмреАрдЪ рдЙрджрд╛рд╣рд░рдг рдЕрдВрддрд░ const object = { a: 'somestring', b: 42, c: false }; console.log(Object.values(object));
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ , рд╕рд╛рде рд╣реА
MDN рд╡реЗрдм рдбреЙрдХреНрд╕ рдореЗрдВ Object.values тАЛтАЛ() рджреЗрдЦреЗрдВред
3. String.prototyp.padEnd
рдкреИрдбрдПрдВрдб () рд╡рд┐рдзрд┐ рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреЛ рджрд┐рдП рдЧрдП рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЕрдВрддрддрдГ рджреЛрд╣рд░рд╛рддреЗ рд╣реБрдП) рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдХрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдВрдмрд╛рдИ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПред рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд (рджрд╛рдПрдВ) рдореЗрдВ рдЬреЛрдбрд╝ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
String.prototype.padEnd(maxLength [ , fillString ]) : String
maxLength - рд╡рд░реНрддрдорд╛рди рдкрдВрдХреНрддрд┐ рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдореА рдкрдВрдХреНрддрд┐ рдХреА рд▓рдВрдмрд╛рдИ рдЧрджреНрджреЗрджрд╛рд░ рд╣реИред рдпрджрд┐ рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдЙрд╕реА рддрд░рд╣ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
fillString - рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧред рдпрджрд┐ рдпрд╣ рд░реЗрдЦрд╛ рдмрд╣реБрдд рд▓рдВрдмреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рдИрдВ рдУрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред "" (0x0020 рд╕реНрдкреЗрд╕) рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИред
рдЙрджрд╛рд╣рд░рдг 'abc'.padEnd(10);
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
- рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдпрд╛ URL рдореЗрдВ рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЬреЛрдбрд╝рдирд╛: 'рдлрд╝рд╛рдЗрд▓ 001.txt'
- рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрд░реЗрдЦрдг: "рдЯреЗрд╕реНрдЯ 001: ment"
- рдЕрдВрдХ рдХреА рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдпрд╛ рдмрд╛рдЗрдирд░реА рдирдВрдмрд░ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ: '0x00FF'
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ , рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдордбреАрдПрди
рд╡реЗрдм рдбреЙрдХреНрд╕ рдореЗрдВ String.prototype.padEnd рджреЗрдЦреЗрдВред
4. String.prototype.padStart
рдкреИрдбрд╕реНрдЯрд╛рд░реНрдЯ () рд╡рд┐рдзрд┐ рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреЛ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ (рдХрдИ рдмрд╛рд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ) рд╕реЗ рднрд░рддреА рд╣реИ рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рд▓рд╛рдЗрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдВрдмрд╛рдИ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рдПред рднрд░рдиреЗ рдХреЛ рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд (рдмрд╛рдПрдВ) рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
String.prototype.padStart(maxLength [, fillString]) : String
maxLength - рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рд╛рд░рд╛рдВрд╢ рд░реЗрдЦрд╛ рдХреА рд▓рдВрдмрд╛рдИред рдпрджрд┐ рдорд╛рди рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреАред
fillString - рд╡рд░реНрддрдорд╛рди рд▓рд╛рдЗрди рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧред рдпрджрд┐ рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреА рдЧрдИ рд▓рдВрдмрд╛рдИ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди "" (0x0020 рд╕реНрдкреЗрд╕) рд╣реИред
рдЙрджрд╛рд╣рд░рдг 'abc'.padStart(10);
рдкреИрдбрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐ рдХреЛ рдкреИрдбрд▓рд╛рдЗрдЯ рдФрд░ рдкреИрдбрд▓рд╛рдЗрдЯ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ?
рджреНрд╡рд┐рджрд┐рд╢ рдпрд╛ рджрд╛рдПрдВ-рдмрд╛рдПрдВ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, "рдмрд╛рдПрдВ" рдФрд░ "рджрд╛рдПрдВ" рд╢рдмреНрдж рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, padStart рдФрд░ padEnd рдХрд╛ рдирд╛рдордХрд░рдг рдореМрдЬреВрджрд╛ рдирд╛рдореЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ startWith рдФрд░ EndWith рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ String.prototyp.padStart, рд╕рд╛рде рд╣реА
MDN рд╡реЗрдм рдбреЙрдХреНрд╕ рджреЗрдЦреЗрдВ ред
5. Object.getOwnPropertyDescriptor
Object.getOwnPropertyDescriptor () рд╡рд┐рдзрд┐ рдкрд╛рд╕ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐ (рдпрд╛рдиреА, рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реАрдзреЗ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рд╡рд░рдгрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд░рд┐рдЯрд░реНрдиред
Object.getOwnPropertyDescriptor(obj, prop) : Object
obj - рд╡рд╣ рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдЦреЛрдЬреА рдЬрд╛рддреА рд╣реИред
рдкреНрд░реЛрдк - рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рдЬрд┐рд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдЯреАрдХ рд╡рд┐рд╡рд░рдг рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо рдФрд░ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рд╡рд░рдгрдХ рд╣реЛрддреА рд╣реИред
рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╡рд┐рд╡рд░рдгрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИ:
- рдореВрд▓реНрдп - рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЬреБрдбрд╝рд╛ рдореВрд▓реНрдп (рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ)ред
- рд▓реЗрдЦрди рдпреЛрдЧреНрдп - рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЬреБрдбрд╝реЗ рдореВрд▓реНрдп рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╕рдЪ рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЧрд▓рдд (рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ)ред
- get - рдРрд╕рд╛ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ (рдХреЗрд╡рд▓ рдПрдХреНрд╕реЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ)ред
- рд╕реЗрдЯ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдмрджрд▓рддрд╛ рд╣реИ, рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ (рдХреЗрд╡рд▓ рдПрдХреНрд╕реЗрд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдореЗрдВ)ред
- рд╡рд┐рдиреНрдпрд╛рд╕ рдХрд░рдиреЗ рдпреЛрдЧреНрдп - рдпрджрд┐ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╣реИрдВрдбрд▓ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЙрд╕ рд╡рд╕реНрддреБ рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЧрд▓рдд рд╣реИред
- enumerable - рд╕рд╣реА рд╣реИ рдЕрдЧрд░ рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдЙрдкрд▓рдмреНрдз рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╕рдордп рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЭреВрдареЗред
рдЙрджрд╛рд╣рд░рдг obj = { get foo() { return 10; } }; console.log(Object.getOwnPropertyDescriptor(obj, 'foo'));
Object.getOwnPropertyDescriptor () рдХреЗ рд▓рд┐рдП рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛: рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЧреБрдг рдХреЙрдкреА рдХрд░реЗрдВ
ES6 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреБрдгреЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╡рд┐рдзрд┐ рд╣реИ: Object.assign ()ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдорд┐рд▓ рдФрд░ рд╕реЗрдЯ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреА рдХреБрдВрдЬреА рдХреБрдВрдЬреА рд╣реИ:
const value = source[key];
рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ (рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ, рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ, рд▓рд┐рдЦрдиреЗ, рдЖрджрд┐) рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдЧреБрдгреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЙрдкреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдореЗрдВ рдПрдХ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рд╣реИ рдЬрд┐рд╕рдХреА рдХреБрдВрдЬреА foo рд╣реИ:
const source = { set foo(value) { console.log(value); } }; console.log(Object.getOwnPropertyDescriptor(source, 'foo'));
рд▓рдХреНрд╖реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ foo рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП Object.assign () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
const target1 = {}; Object.assign(target1, source); console.log(Object.getOwnPropertyDescriptor(target1, 'foo'));
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Object.getOwnPropertyDescriptors () рдХреЗ рд╕рд╛рде Object.defineProperties () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░:
const target2 = {}; Object.defineProperties(target2, Object.getOwnPropertyDescriptors(source)); console.log(Object.getOwnPropertyDescriptor(target2, 'foo'));
рджреВрд╕рд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛: рдХреНрд▓реЛрдирд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕
рдЙрдерд▓рд╛ рдХреНрд▓реЛрдирд┐рдВрдЧ рдЧреБрдгреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП Object.getOwnPropertyDescriptors () рднреА рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
рдЗрд╕ рдмрд╛рд░ рд╣рдо Object.create () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реМрдЯреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░реЙрдкрд░реНрдЯреА рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рдЬреЛ Object.getOwnPropertyDescriptors () рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред
const clone = Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));
рддреАрд╕рд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛: рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдмреНрджрд┐рдХред
рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╡рд┐рд╢реЗрд╖ __proto__ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ:
const obj = { __proto__: prot, foo: 123, };
рдХрд╛рд╢, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд░рд╣рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реЛрддреА рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди рд╣реИ Object.create () рдФрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ:
const obj = Object.create(prot); obj.foo = 123;
рд▓реЗрдХрд┐рди рдЖрдк Object.getOwnPropertyDescriptors () рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const obj = Object.create( prot, Object.getOwnPropertyDescriptors({ foo: 123, }) );
рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк Object.assign () рд╣реИ:
const obj = Object.assign( Object.create(prot), { foo: 123, } );
рдиреБрдХрд╕рд╛рди: рд╕реБрдкрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рддрд░реАрдХреЛрдВ рдХреА рдирдХрд▓ред
рд╡рд╣ рд╡рд┐рдзрд┐ рдЬреЛ рд╕реБрдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рд╡рд╣ рдЕрдкрдиреЗ рдШрд░реЗрд▓реВ рдСрдмреНрдЬреЗрдХреНрдЯ (рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ) рд╕реЗ рдХрд╕рдХрд░ рдмрдВрдзреА рд╣реЛрддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдпрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ , рд╕рд╛рде рд╣реА
MDN рд╡реЗрдм рдбреЙрдХреНрд╕ рдореЗрдВ Object.getOwnPropertyDescriptor рджреЗрдЦреЗрдВред
6. рдЕрдиреБрдЧрд╛рдореА рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо
рд╣реИрдВрдЧрд┐рдВрдЧ рдХреЙрдорд╛ (рдЯреНрд░реЗрд▓рд┐рдВрдЧ рдХреЙрдорд╛) - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рдирдП рддрддреНрд╡реЛрдВ, рдорд╛рдкрджрдВрдбреЛрдВ рдпрд╛ рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдирдИ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдмрд╕ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдЗрд╕рдореЗрдВ рдлрд╛рдВрд╕реА рд╡рд╛рд▓рд╛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреНрд▓реАрдирд░ рдореЗрдВ рдЕрдВрддрд░ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдХрдо рдкрд░реЗрд╢рд╛рдиреА рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рд╣реИрдВрдЧрд┐рдВрдЧ рдХреЙрдорд╛
рд╕рд░рдгрд┐рдпреЛрдВрдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ arrays рдореЗрдВ рдлрд╛рдВрд╕реА рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо:
var arr = [ 0, 1, 2, ]; console.log(arr);
рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓рдЯрдХрдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЫреЗрдж рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред "рдЫреЗрдж" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХреЛ рд╡рд┐рд░рд▓ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдПрдХ рдШрдиреЗ рд╕рд░рдгреА рдореЗрдВ "рдЫреЗрдж" рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ)ред рдЬрдм рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкреБрдирд░рд╛рд╡реГрддрд┐ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Array.prototyp.forEach () рдпрд╛ Array.prototype.map (), рдЫреЗрдж рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд╕реНрддреБрдПрдВ var object = { foo: "bar", baz: "qwerty", age: 42, }; console.log(object);
рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╣рдВрдЧрд╛рдорд╛
рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░рд┐рднрд╛рд╖рд╛рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдФрд░ рд╕рдорд╛рди рд╣реИрдВред рдбреИрдВрдЧреНрд▓рд┐рдВрдЧ рдХреЙрдорд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд▓рдВрдмрд╛рдИ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
function f(p) {} function f(p,) {} (p) => {}; (p,) => {};
рд╡рд┐рдзрд┐ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рд╣реИрдВрдЧрд┐рдВрдЧ рдХреЙрдорд╛ рдХрдХреНрд╖рд╛рдУрдВ рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
class C { one(a,) {}, two(a, b,) {}, } var obj = { one(a,) {}, two(a, b,) {}, };
рдлрдВрдХреНрд╢рди рдХреЙрд▓рдирд┐рдореНрди рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдорд╛рдиреНрдп рдФрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВред
f(p); f(p,); Math.max(10, 20); Math.max(10, 20,);
рдЕрдорд╛рдиреНрдп рд╣реИрдВрдЧрд┐рдВрдЧ рдХреЙрдорд╛рдлрд╝рдВрдХреНрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдпрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕рдПрд░реЛрд░ рдмрдврд╝рд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╢реЗрд╖ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдлрд╛рдВрд╕реА рд╡рд╛рд▓реЗ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред
function f(,) {}
рд╡рд┐рдирд╛рд╢ рдореЗрдВ рд╣реИрдВрдЧрд┐рдВрдЧ рдХреЙрдорд╕
рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╣реИрдВрдЧрд┐рдВрдЧ рдХреЙрдорд╛ рдХреЛ рдмрд╛рдИрдВ рдУрд░ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╢реЗрд╖ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдПрдХ рд╕рд┐рдВрдЯреЗрдХреНрд╕рдСрдпрд░ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
var [a, ...b,] = [1, 2, 3];
JSON рдбреИрдВрдЧрд▓рд┐рдВрдЧ рдХреЙрдорд╕
рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИрдВрдЧрд┐рдВрдЧ рдХреЙрдорд╛ рдХреЗрд╡рд▓ ECMAScript 5 рдореЗрдВ рдЕрдиреБрдордд рд╣реИрдВред рдЪреВрдВрдХрд┐ JSON ES5 рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП JSON рдореЗрдВ
рд╣реИрдВрдЧрд┐рдВрдЧ рдХреЙрдорд╛ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ
редрджреЛрдиреЛрдВ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдПрдХ SyntaxError рдлреЗрдВрдХрддреА рд╣реИрдВ
JSON.parse('[1, 2, 3, 4, ]'); JSON.parse('{"foo" : 1, }');
рд╣реИрдВрдЧ рдХреЙрдорд╛ рдЙрдкрдпреЛрдЧреА рдХреНрдпреЛрдВ рд╣реИрдВ?
рдЗрд╕рдХреЗ рджреЛ рдлрд╛рдпрджреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рддрддреНрд╡реЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдиреЗ рдкрд░ рдЖрдкрдХреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рджреВрд╕рд░реЗ, рдпрд╣ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЗ:
[ 'Foo' ] : [ 'Foo', '' ]
'рдлреВ' рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдФрд░ 'рдмрд╛рд░' рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрддрд┐рдо рд▓рд╛рдЗрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред
рдПрдордбреАрдПрди рд╡реЗрдм рдбреЙрдХреНрд╕ рдкрд░ рдЯреНрд░реЗрд▓рд┐рдВрдЧ рдХреЙрдорд╛ рджреЗрдЦреЗрдВред
7. рд╢рд╛рд░рджрд╛рдЕрд░реЗрдмрдлрд╝рд░
SharedArrayBuffer рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ ArrayBuffer рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди, рдЖрджрд┐рдо рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд-рд▓рдВрдмрд╛рдИ рд╡рд┐рднрд╛рдЬрди рдмрдлрд╝рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рд╛рдЭрд╛ рдореЗрдореЛрд░реА рдкрд░ рд╡реНрдпреВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП SharedArrayBuffer рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред SharedArrayBuffer рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
new SharedArrayBuffer(length) : Object
рд▓рдВрдмрд╛рдИ - рдЖрдХрд╛рд░, рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ, рдмрдлрд░ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╡рд╛рдкрд╕реА - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓рдВрдмрд╛рдИ рдХрд╛ рдПрдХ рдирдпрд╛ рд╢реЗрдпрд░реНрдбрдПрдпрд░рдмреНрд░реЗрдпрд░ рдСрдмреНрдЬреЗрдХреНрдЯред рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА 0 рд╣реИред
рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рдПрдЬреЗрдВрдЯ рдФрд░ рджреВрд╕рд░реЗ (рдПрдЬреЗрдВрдЯ рд╡реЗрдм рдкреЗрдЬ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо рдпрд╛ рд╡реЗрдм-рд╡рд░реНрдХрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдореЗрдореЛрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЗрдореЛрд░реА рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреЛрд╕реНрдЯрдореИрд╕реЗрдЬ рдФрд░ рд╕рдВрд░рдЪрд┐рдд рдХреНрд▓реЛрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдВрд░рдЪрд┐рдд рдХреНрд▓реЛрдирд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо SharedArrayBuffers рдФрд░ TypedArrays рдХреЛ SharedArrayBuffers рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд░рддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, SharedArrayBuffer рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд░рд┐рд╕реАрд╡рд░ рдХреЛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╛рдкреНрдд рдПрдЬреЗрдВрдЯ (ArrayBuffer рдХреЗ рд╕рдорд╛рди) рдХреЗ рдЕрдВрджрд░ рдПрдХ рдирдпрд╛ рдирд┐рдЬреА SharedArrayBuffer рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рджреЛрдиреЛрдВ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рдХреЛ SharedArrayBuffer рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдмреНрд▓реЙрдХ рд╣реИ, рдФрд░ рдПрдХ рдПрдЬреЗрдВрдЯ рдореЗрдВ рдмреНрд▓реЙрдХ рдореЗрдВ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреНрд░рднрд╛рд╡ рдЕрдВрддрддрдГ рджреВрд╕рд░реЗ рдПрдЬреЗрдВрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред
var sab = new SharedArrayBuffer(1024); worker.postMessage(sab);
рд╕рд╛рдЭрд╛ рд╕реНрдореГрддрд┐ рдХреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдпрд╛ рдореБрдЦреНрдп рд╕реВрддреНрд░ рдореЗрдВ рдПрдХ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдФрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд┐рд╕реНрдЯрдо (рд╕реАрдкреАрдпреВ, рдУрдПрд╕, рдмреНрд░рд╛рдЙрдЬрд╝рд░) рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдкреНрд░рдЪрд╛рд░ рд╣реЛрдиреЗ рддрдХ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╕рд╛рдЭрд╛ рдРрд░реЗ рдмрдлрд╝рд░реНрд╕ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рд╕рд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд┐рдо рдЗрдорд╛рд░рдд рдмреНрд▓реЙрдХ рд╣реИред рд╡реЗ рдЖрдкрдХреЛ рдХрдИ рд╢реНрд░рдорд┐рдХреЛрдВ рдФрд░ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдПрдХ рд╢реЗрдпрд░рдбреНрд░реЗрдЕрд░ рдмрдлрд╝рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ (рдмрд╛рдЗрдЯ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдЯрд╛рдЗрдк рдПрд░реЗ рдореЗрдВ рд▓рдкреЗрдЯреЗрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рдирд┐рдордп рдХреЗ рджреЛ рдлрд╛рдпрджреЗ рд╣реИрдВ:
рдЖрдк рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рддреЗрдЬреА рд╕реЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдордиреНрд╡рдп рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдкреЛрд╕реНрдЯрдореЗрдЬреЗрдЬ () рдХреА рддреБрд▓рдирд╛ рдореЗрдВ)ред
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬреЗ рдЧрдП рд╕рд╛рдЭрд╛ рд╕рд░рдгреА рдХреЗ рдмрдлрд░ рдХреЛ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред
SharedArrayBuffer рдХреЗ рдЧреБрдг рдФрд░ рддрд░реАрдХреЗредSharedArrayBuffer.length - SharedArrayBuffer рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп 1 рд╣реИред
SharedArrayBuffer.prototype - рд╕рднреА SharedArrayBuffer рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдг рджреЗрддрд╛ рд╣реИред
рд╢реЗрдЕрд░рдПрд░реНрд░реЗрдмрдлрд╝рд░ рдЗрдВрд╕реНрдЯреЗрдВрд╕рдЧреБрдгSharedArrayBuffer.prototype.constructor - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдореВрд▓реНрдп рдорд╛рдирдХ рдирд┐рд░реНрдорд┐рдд рд╢реЗрдпрд░реНрдбрдПрдпрд░рдмреНрд░реЗрдпрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИред
SharedArrayBuffer.prototype.byteLength (рдХреЗрд╡рд▓ рдкрдврд╝реЗрдВ) - рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ред рдпрд╣ рддрдм рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рд░рдгреА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЙрд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред
рддрд░реАрдХреЛрдВSharedArrayBuffer.prototyp.slice () - рдПрдХ рдирдпрд╛ SharedArrayBuffer рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рд╛рдордЧреНрд░реА рд╢реБрд░реБрдЖрдд рд╕реЗ рд▓реЗрдХрд░ рдЕрдВрдд рддрдХ, рдЗрд╕ SharedArrayBuffer рдХреЗ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рдкреНрд░рддрд┐ рд╣реИ, рдЕрдирдиреНрдп рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рд╢реБрд░реБрдЖрдд рдпрд╛ рдЕрдВрдд рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ рдпрд╣ рд╢реБрд░реБрдЖрдд рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рд░рдгреА рдХреЗ рдЕрдВрдд рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ Array.prototype.slice () рдХреЗ рд╕рдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИред
sab.slice([begin, end]) : Object
рд╢реБрд░реВ - рд╢реВрдиреНрдп рд╕реВрдЪрдХрд╛рдВрдХ рдЬрд┐рд╕ рдкрд░ рдирд┐рд╖реНрдХрд░реНрд╖рдг рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдЖрдк рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрдд рд╕реЗ рдСрдлрд╕реЗрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд▓рд╛рдЗрд╕ (-2) рдЕрдВрддрд┐рдо рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ рдХреНрд░рдо рдореЗрдВ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдпрджрд┐ рд╢реБрд░реБрдЖрдд рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЯреБрдХрдбрд╝рд╛ 0 рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдЕрдВрдд - рд╢реВрдиреНрдп рдЖрдзрд╛рд░рд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдЬрд┐рд╕рд╕реЗ рдирд┐рд╖реНрдХрд░реНрд╖рдг рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд▓рд╛рдЗрд╕ (1,4) рдЪреМрдереЗ рддрддреНрд╡ (рд╕реВрдЪрдХрд╛рдВрдХ 1, 2, рдФрд░ 3 рдХреЗ рд╕рд╛рде рддрддреНрд╡) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд╕рд░реЗ рддрддреНрд╡ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрдд рд╕реЗ рдСрдлрд╕реЗрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрд▓рд╛рдЗрд╕ (2, -1) рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рджреВрд╕рд░реЗ-рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреАрд╕рд░реЗ рддрддреНрд╡ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЕрдВрдд рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕реНрд▓рд╛рдЗрд╕ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЕрдВрдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (sab.byteLength)ред
рдЙрджрд╛рд╣рд░рдг var sab = new SharedArrayBuffer(1024); sab.slice();
SharedArrayBuffer рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рд╡рд┐рдирд┐рд░реНрджреЗрд╢ , рд╕рд╛рде рд╣реА
MDN рд╡реЗрдм рдбреЙрдХреНрд╕ рдореЗрдВ рджреЗрдЦреЗрдВ ред
8. рдПрдЯрд┐рдХреНрд╕
рдПрдЯреЛрдорд┐рдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред SharedArrayBuffer рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдЯреЛрдорд┐рдХреНрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЕрдиреНрдп рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдЯреЙрдорд┐рдХреНрд╕ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдпрд╛ рдПрдЯрдорд┐рдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рдПрдЯрдорд┐рдХреНрд╕ рдЧреБрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕реНрдерд┐рд░ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрде рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рддрд░рд╣)ред
рдЬрдм рдореЗрдореЛрд░реА рд╕рд╛рдЭрд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХрдИ рдереНрд░реЗрдбреНрд╕ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдкрдврд╝ рдФрд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдЗрд╕ рдмрд╛рдд рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдорд╛рди рд▓рд┐рдЦреЗ рдФрд░ рдкрдврд╝реЗ рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдЕрдЧрд▓рд╛ рдСрдкрд░реЗрд╢рди рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХрд╛рд░реНрдп рдЕрдкрдирд╛ рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рд╡реЗ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдЧреБрдг
рдПрдЯреЛрдорд┐рдХреНрд╕ [Symbol.toStringTag] - рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдПрдЯрдорд┐рдХреНрд╕ рд╣реИред
рддрд░реАрдХреЛрдВ
рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди- Atomics.add () - рдкреНрд░рд╕реНрддреБрдд рдорд╛рди рдХреЛ рд╕рд░рдгреА рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдкрд░ рд╡рд░реНрддрдорд╛рди рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд┐рдЫрд▓рд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
- Atomics.and () - рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрд░реЗ рдкреЛрдЬрд╝рд┐рд╢рди рдкрд░ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд┐рдЫрд▓рд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
- Atomics.compareExchange () - рдкреНрд░рд╕реНрддреБрдд рдореВрд▓реНрдп рдХреЛ рд╕рд░рдгреА рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ, рдпрджрд┐ рдпрд╣ рдкреНрд░рд╕реНрддреБрдд рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдкрд┐рдЫрд▓рд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
- Atomics.exchange() тАФ . .
- Atomics.load() тАФ .
- Atomics.or() тАФ OR . .
- Atomics.store() тАФ . .
- Atomics.sub() тАФ . .
- Atomics.xor() тАФ XOR . .
Atomics.add() . , , .
Atomics.add(typedArray, index, value) : mixed
- typedArray тАФ . Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array Uint32Array.
- index тАФ typedArray value.
- value тАФ .
- return тАФ (typedArray[index]).
- TypeError, typedArray .
- TypeError, typedArray .
- RangeError, index typedArray.
var sab = new SharedArrayBuffer(1024); var ta = new Uint8Array(sab); Atomics.add(ta, 0, 12);
Atomics.add()
,
MDN Web Docs .
Wait notify
wait() wake() futexes (┬лfast user-space mutex┬╗ тАФ mutex ) Linux , true, .
Atomics.wait()
, -. ┬лok┬╗, ┬лnot-equal┬╗ ┬лtimed-out┬╗. , ( wait() ).
- Atomics.wait() тАФ , -. ┬лok┬╗, ┬лnot-equal┬╗ ┬лtimed-out┬╗. , ( wait() ).
- Atomics.wake() тАФ , . , .
- Atomics.isLockFree(size) тАФ , . true, ( ). .
workers. , .
, , :
while (sharedArray [0] === 123);
sharedArray [0] ( sharedArray тАФ , - ). :
const tmp = sharedArray [0]; while (tmp === 123);
, .
тАФ :
, . , , :
workers, .
Atomics, .
:
.Atomics workers. , :
Atomics.load (TypedArray <T>, index) : T Atomics.store (TypedArray <T>, index, value: T) : T
, , Atomics (, ) , . , , Atomics.
, , Atomics ( sharedArray):
:
.
while , Atomics , : Atomics.wait (Int32Array, index, value, timeout) Atomics.wake (Int32Array, index, count).
:
atomic operationsAtomics , . рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
Atomics.add (TypedArray <T>, index, value) : T
, : index += value;
c .
тАФ (): тАФ , .
┬лTear-Free Reads┬╗ , , :
- , Typed Arrays ( DataViews).
- : sharedArray.byteOffset% sharedArray.BYTES_PER_ELEMENT === 0
- .
, , :
, Atomics .
Shared Array Buffers
Shared Array Buffers JavaScript ┬л ┬╗. JavaScript ┬л ┬╗: , . , , , .
Shared Array Buffers (RTC): , , . , RTC: Shared Array Buffers, .
, RTC. await.
Shared Array Buffers emscripten pthreads asm.js. emscripten:
[En] [Shared Array Buffers allow] Emscripten applications to share the main memory heap between web workers. This along with primitives for low level atomics and futex support enables Emscripten to implement support for the Pthreads (POSIX threads) API.
[Ru] [Shared Array Buffers ] Emscripten -. futex Emscripten API Pthreads ( POSIX).
C C ++ asm.js.
, WebAssembly. , web workers , , WebAssembly . , WebAssembly.
,
( 32 ). , тАФ . , , :
- TextEncoder TextDecoder: Uint8Array, .
- stringview.js: , . .
- FlatJS: JavaScript (, ) (ArrayBuffer SharedArrayBuffer). JavaScript + FlatJS JavaScript. JavaScript (TypeScript . .) .
- TurboScript: JavaScript- . asm.js WebAssembly.
, , тАФ тАФ . , .
, Shared Array?. ( "
A Taste of JavaScript's New Parallel Primitives тАЭ┬╗, , web workers. 4 web workers , , , , 6,9 (1 web worker) 25,4 (4 web workers). web workers , .
, , .
Shared Array Buffers :
JavaScript, :
Atomics Object
,
MDN Web Docs .
9. Async functions
Async function AsyncFunction constructor
AsyncFunction async function. JavaScript AsyncFunction.
, AsyncFunction . , .
Object.getPrototypeOf(async function(){}).constructor
new AsyncFunction([arg1[, arg2[, ...argN]],] functionBody)
arg1, arg2,тАж argN тАФ , . , JavaScript , ; , ┬лx┬╗, ┬лtheValue┬╗, ┬лa,b┬╗.
functionBody тАФ , JavaScript.
async function, AsyncFunction constructor , . , async function expression , .
, , , .
AsyncFunction constructor ( new) , .
async functions AsyncFunction constructor, ; . , , AsyncFunction constructor. eval async function.
async function AsyncFunction constructor
function resolveAfter2Seconds(x) { return new Promise(resolve => { setTimeout(() => { resolve(x); }, 2000); }); } var AsyncFunction = Object.getPrototypeOf(async function(){}).constructor var a = new AsyncFunction('a', 'b', 'return await resolveAfter2Seconds(a) + await resolveAfter2Seconds(b);'); a(10, 20).then(v => { console.log(v);
async function
async function , AsyncFunction. async-, async function.
async function name([param[, param[, ... param]]]) {
name тАФ .
param тАФ , .
statements тАФ , .
async Promise. , Promise , . async , Promise (throws) .
async await, async Promise, async .
await . SyntaxError.
async/await promises Promises. Promises callback-, async/await promises.
рдЙрджрд╛рд╣рд░рдг function resolveAfter2Seconds(x) { return new Promise(resolve => { setTimeout(() => { resolve(x); }, 2000); }); } async function add1(x) { const a = await resolveAfter2Seconds(20); const b = await resolveAfter2Seconds(30); return x + a + b; } add1(10).then(v => { console.log(v);
?
JS- .js , . , . .
, JS тАФ , . , , , , . , . (You-Dont-Know-JS/async & performance, Jake Archibald).
? console.log() , .
┬л┬╗ , :
ajax( "http://some.url.1", function myCallbackFunction(data){ console.log( data );
.
3 getUser, getPosts, getComments.
const { getUser, getPosts, getComments } = require('./db'); getUser(1, (error, user) => { if(error) return console.error(error); getPosts(user.id, (error, posts) => { if(error) return console.error(error); getComments(posts[0].id, (error, comment) => { if(error) return console.error(error); console.log(comments); }); }); });
, .
Callback Hell . , () , .
Promise (
, . . .
getUser(1) .then(user => getPosts(user,id)) .then(posts => getComments(posts[0].id)) .then(comments => console.log(comments)) .catch(error => console.error(error));
Promise Generators (
. , Promise, тАФ , . try...catch. тАФ Promise , . ,
co . .
co(function* () { try { let user = yield getUser(1); let posts = yield getPosts(user.id); let comments = yield getComments(posts[0].id); console.log(comments); } catch (error) { console.log(error); } }); function co(generator) { const iterator = generator(); return new Promise((resolve, reject) => { function run(prev) { const { value, done } = iterator.next(prev); if (done) resolve(value); else if (value instanceof Promise) value.then(run, reject); else run(value); } run(); }); }
.
(Calback functions) тАФ , .
(Promises) тАФ , .
(Generators) тАФ , , .
(Promises) (Generators), , .
, , :
function getUser(id) { return { id: 1 }; } let user = getUser(1); console.log(user);
( async), Promise id.
async function getUser(id) { return { id: 1 }; } let user = getUser(1); console.log(user);
, , Promis ( Promis ). , .
then().
async function getUser(id) { return { id: 1 }; } getUser(1) .then(user => console.log(user));
await .
( HTTP .
fetch(`https://jsonplaceholder.typicode.com/users/1`) .then(data => data.json()) .then(data => console.log(data));
Promise.
, .
async function sendRequest() { let response= await fetch(`https://jsonplaceholder.typicode.com/users/1`); return response.json(); } async function main() { var a = await sendRequest(); console.log(a); } main();
async . main(). then(), .
async function sendRequest() { let response= await fetch(`https://jsonplaceholder.typicode.com/users/1`); return response.json(); } sendRequest() .then((data) => console.log(data));
fetch(). await, : fetch() response. : fetch() .
Promise async function
await , .
try...catch.
async function sendRequest() { let response = await fetch(`https://jsonplaceholder.typicode.com/users/1`); try { throw new Error("Unexpected error"); return response.json(); } catch(error) { console.log(error);
тАж
Async Function Definitions
,
MDN Web Docs .