рдорд╛рдирдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рд╡рд┐рдЪрд╛рд░ред Core.js

рдПрдХ рдмрдЪреНрдЪреЗ рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрд╛, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╕рд░реНрд╡рд░ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЙрд╕реЗ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛, рдЖрд╕рд╛рдиреА рд╕реЗ, рдЖрд╕рд╛рдиреА рд╕реЗред рддрдм рд╡рд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рджреБрд░реНрдЦреА рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ред
- рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ

рдореИрдВ рдХреНрдпреЛрдВ рд╣реВрдБ? рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рдЖрдзрд╛рд░ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред

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

рд╡реИрдирд┐рд▓рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреИрдВрдбрд░реНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдорддреМрд░ рдкрд░ рдЕрдЪреНрдЫреА рд╣реИред рдпрд╣ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдИрд╕реАрдПрдордП -262 рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рди рдХреЗрд╡рд▓ рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ - 3 рд╕реЗ рдбреНрд░рд╛рдлреНрдЯ 6. рдПрдкреАрдЖрдИ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдИрд╕реАрдПрдордП -402 рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдПрдкреАрдЖрдИред рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬрд┐рдирдХреЗ рдмрд┐рдирд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ setTimeout , рд╡реЗрдм рдорд╛рдирдХреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдХрдВрд╕реЛрд▓ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рдЕрд▓рдЧ рд╣реИред рдкреБрд░рд╛рдиреЗ IE рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдмреЙрдХреНрд╕ рдореЗрдВ рд╣рдореЗрдВ 90% рджрд╛рдврд╝реА рд╡рд╛рд▓реЗ рдорд╛рдирдХ ES3 рдкреБрд╕реНрддрдХрд╛рд▓рдп Array#forEach, Function#bind, Object.create рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Array#forEach, Function#bind, Object.create рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЗ рдмрд┐рдирд╛ рднреА, рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Node.js, рдЬрд┐рд╕ рдкрд░ рдХрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рднрд╡рд┐рд╖реНрдп рдХрд╛ рдкреВрд░рд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛ рд░рд╣реЗ рд╣реИрдВред ES6ред

рдореИрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдФрд░ рдХрд┐рд╕реА рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ, рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдпрдерд╛рд╕рдВрднрд╡ рдЖрдзреБрдирд┐рдХ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ (рдЕрдм рддрдХ) рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рд▓реЗрдЦ core.js рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ - рдорд╛рдирдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд▓реЗрдЦ рдЖрдзреБрдирд┐рдХ рдорд╛рдирдХреАрдХреГрдд рдорд╛рдирдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдПрдХ рдзреЛрдЦрд╛ рдкрддреНрд░ рднреА рд╣реИ рдФрд░ рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдкрд░ рдиреЛрдЯ рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдордЧреНрд░реА, рдпрд╛ рдЬреЛ рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ:



рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ, рдмрд╣реБ-рдкреБрд╕реНрддрдХ рдФрд░ рдкрд╣рд▓реЗ рдЕрдзреНрдпрд╛рдп рдмрд╣реБрдд рдЖрдо рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдкрдврд╝рдиреЗ рдХреА рдХреЛрдИ рдЗрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ - рдКрдкрд░ рджреА рдЧрдИ рд╕рд╛рдордЧреНрд░реА рдХреА рддрд╛рд▓рд┐рдХрд╛, рдЙрд╕ рдЕрдиреБрднрд╛рдЧ рдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред

# рджреГрд╖реНрдЯрд┐рдХреЛрдг



рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдореБрдЦреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдорд╛рдирдХ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ:

рдкрд╣рд▓рд╛ рдХреЗрд╡рд▓ рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИ, рдХреЗрд╡рд▓ рдорд╛рдирдХреАрдХреГрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ ред рдкреНрд░рдмрд▓рд┐рдд рдареЛрд╕ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рдирд╣реАрдВ рдЯреВрдЯреЗрдЧрд╛ред рдРрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреЗрд╡рд▓ рд╕рдВрдмрдВрдзрд┐рдд рдПрдкреАрдЖрдИ рднрд╛рд╖рд╛ рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдкреЙрд▓реАрдлрд┐рд▓реНрд╕ рдПрдХ рдорд╛рдирдХ рдпрд╛ рдЙрд╕рдХреЗ рднрд╛рдЧ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, es5-shim рдпрд╛ es6-shim ред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЖрдкрдХреЛ рдХрдИ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрдирдХреЗ рдЖрдВрддрд░рд┐рдХ рдШрдЯрдХ рдЕрдХреНрд╕рд░ рдПрдХ рджреВрд╕рд░реЗ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реЗрдЯ рдЕрдХреНрд╕рд░ рд╕реИрдХрдбрд╝реЛрдВ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рддрдХ рдмрдврд╝рддрд╛ рд╣реИред рдФрд░ рд╕рднреА рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛ рдореИрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ, рд╡реЗ рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рд╣реИрдВред рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирдЧрдгреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрддреЗ рд╕рдордп рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

рджреВрд╕рд░рд╛ рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ ред рдпрд╛ рддреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ, рдпрд╛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдпрд╛ рдЗрд╕рдХреЗ рд▓реЛрдорд╢ рдХрд╛ рдХрд╛рдВрдЯрд╛ред рдЖрдорддреМрд░ рдкрд░, рдпрд╣ рдХрд╛рдлреА рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╕рд░рд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд рд╣реИрдВред рдЪреВрдБрдХрд┐ рдпрд╣ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ noConflict рд╡рд┐рдзрд┐ рдЕрдХреНрд╕рд░ рдореМрдЬреВрдж рд╣реЛрддреА рд╣реИ, рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рд╡рд╛рдкрд╕ рд▓рд╛рддреА рд╣реИ, рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╕реЗ рдХрдо рд╣реИ; рдпрд╣ рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣рд╛рдБ рд╡рд░реНрдгрд┐рдд рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред

рддреАрд╕рд░рд╛ рди рдХреЗрд╡рд▓ рдорд╛рдирдХреАрдХреГрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рд░рдгреА рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рд╕рд░рдгреА рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИред рдЕрдм рдЗрд╕ рд╢реНрд░реЗрдгреА рдореЗрдВ рдирд┐рдпрдд рд╕рдордп рдореЗрдВ рд╕реБрдЧрд░ рдХреЗ рдирд┐рдпрдо - рдореВрдЯреНрд╕ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк ред рд╡реЗ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреА рдирдХрд▓ рдХрд░рддреА рд╣реИрдВред рдкреЙрд▓рд┐рдлрд╝рд╛рдЗрд▓реНрд╕ рдХреЛ рдпрд╣рд╛рдБ рдкреНрд░рдХрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рд▓реЗрдХрд┐рди рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдорддреМрд░ рдкрд░ рд╕рд░рдгреА рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддрд░реАрдХреЛрдВ, Function#bind рдФрд░ рдХрдИ рдЕрдиреНрдп рддрдХ рд╕реАрдорд┐рдд Function#bind рд╣реИрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдирдХреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдШрд░реНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ред рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд┐рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдХрд┐ рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рдХреА рдЧрд┐рдирддреА рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрддреЗ рд╕рдордп, рдРрд╕реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдЖрдорддреМрд░ рдкрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрддреА рд╣реИрдВред

рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдмрдЬрд╛рдп, рдРрд╕реЗ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рдкрд░реЗрд╢рд╛рдирд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ / LoDash / рдЪреАрдиреА + es5-shim, es6-shim, es6-symbol, setImmediate.js / asap, Moment.js рд╕реЗ рдПрдХ рд╣реЙрдЬрдкреЙрдЯ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред / Intl.js, рдХрдВрд╕реЛрд▓ рдбрдореА ... рдЗрддреНрдпрд╛рджрд┐ред

# рдЖрдЗрдП рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд▓реЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред Core.js рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдпрд╣ рд╣реИ :


# рдПрдХ рдирд┐рдпрдорд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, core.js рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ:

 console.log(Array.from(new Set([1, 2, 3, 2, 1]))); // => [1, 2, 3] console.log('*'.repeat(10)); // => '**********' Promise.resolve(32).then(console.log); // => 32 setImmediate(console.log, 42); // => 42 

# рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡реИрд╢реНрд╡рд┐рдХ core рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рдореЙрдбреНрдпреВрд▓рд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Promise constructor core.Promise рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ Array.from рд╡рд┐рдзрд┐ core.Array.from рд░реВрдк рдореЗрдВ Array.from ред рдореМрдЬреВрджрд╛ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ, рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рд░реНрдорд╛рддрд╛ рд╕реНрдерд┐рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, core.String.repeat String.prototype.repeat рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред

 var log = core.console.log; log(core.Array.from(new core.Set([1, 2, 3, 2, 1]))); // => [1, 2, 3] log(core.String.repeat('*', 10)); // => '**********' core.Promise.resolve(32).then(log); // => 32 core.setImmediate(log, 42); // => 42 

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

# Node.js рдкрд░ рд╕реНрдерд╛рдкрдирд╛:

 npm i core-js 

рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 //  : require('core-js'); //     : var core = require('core-js/library'); // ,   : require('core-js/shim'); 

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИ :


# рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдХрдВрд╕реЛрд▓ рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╕рд░рд▓ рджрд┐рдирд╛рдВрдХ рд╕реНрд╡рд░реВрдкрдг, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Node.js рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╛рде рдЧреНрд░рдиреНрдЯ-рдХреНрд▓реА, рдХреЛрд░-рдЬреЗрдПрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

 npm i -g grunt-cli npm i core-js cd node_modules/core-js && npm i grunt build:date,console,library --path=custom uglify 

рдирддреАрдЬрддрди, рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ custom.js , custom.min.js рд╡рдЬрди 4.8kb рдФрд░ custom.min.map ред library рдлреНрд▓реИрдЧ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рд╣реИ (рдЕрдВрддрд┐рдо рдХреЙрд▓рдо)ред

# рднрд╛рдЧ рдПрдХ: рдмреИрд╕рд╛рдЦреА


рдпрджрд┐ рдХреЛрдИ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ, рддреЛ рд▓реЗрдЦ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмреИрд╕рд╛рдЦреА рдХрд╛ рдЕрд░реНрде рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдорд╛рдирдХреАрдХреГрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ред рддреЛ, рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВ:

# ECMAScript 5



рд╢рд╛рдпрдж рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ ECMAScript 5 рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреНрдпрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд▓рдЧрднрдЧ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреЛ рдИрдПрд╕ 5 рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЙрдирдХреА рдореГрддреНрдпреБ рд╣реЛ рдЧрдИ рд╣реИред рдкреБрд░рд╛рдиреЗ IE рдХреЛ рдЫреЛрдбрд╝рдХрд░ред рдЕрдм рддрдХ, рдЧреНрд░рд╛рд╣рдХ рдЕрдХреНрд╕рд░ IE8 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдорд╛рдВрдЧрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА IE6ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреАред рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдИрдПрд╕ 5 рдкреЙрд▓реАрдлрд╛рдЗрд▓ рдпрд╣ рдПрд╕ 5-рд╢рд┐рдо рд╣реИ , рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╕реБрдЧрд░, рдореЛрдЯреЛрдЯреВрд▓, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдирд╡реАрдирддрд╛ рд╕реЗ рджреВрд░ рд╣реИ, рд╣рдо рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реБрд╡рд┐рдзрд╛рдПрдБред рдмреЗрд╢рдХ, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдб IE8- рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд░реНрдгрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╡рд╛рд▓ рд╣реА рдирд╣реАрдВ рд╣реИред

# рдРрд░реЗ рддрд░реАрдХреЗ


# рдЪрд▓реЛ рд╕рд░рдгреА рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рднреА рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рд╣реИ:

рд╕рд░рдгреА # indexOf рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди рдХреЗ рдмрд░рд╛рдмрд░ рдкрд╣рд▓реЗ рддрддреНрд╡ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдпрд╛ -1 рдпрджрд┐ рдХреЛрдИ рдорд╛рди рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдРрд░реЗ # lastIndexOf рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рд╕рд░рдгреА # forEach рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
рд╕рд░рдгреА # рдорд╛рдирдЪрд┐рддреНрд░ рджрд┐рдП рдЧрдП рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИред
рд╕рд░рдгреА # рдлрд╝рд┐рд▓реНрдЯрд░ рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЪреЗрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдРрд░реЗ рдореЗрдВ рдореМрдЬреВрдж рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЪреЗрдХрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЪреЗрдХ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рд░рдгреА рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрддреНрд╡ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪреЗрдХ рдХрд░реЗрдВред
рдПрд░реЗ # рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд░реЗ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ, рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВред
рдПрд░реЗ # рдХрдо рдХрд░реЗрдВ рд░рд╛рдЗрдЯ рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрд░реЛ рдХреЛ рджрд╛рдпреЗрдВ рд╕реЗ рдмрд╛рдпреЗрдВ рдШреБрдорд╛рддрд╛ рд╣реИ ред

 [1, 2, 3, 2, 1].indexOf(2); // => 1 [1, 2, 3, 2, 1].lastIndexOf(2); // => 3 [1, 2, 3].forEach(function(val, key){ console.log(val); // => 1, 2, 3 console.log(key); // => 0, 1, 2 }); [1, 2, 3].map(function(it){ return it * it; }); // => [1, 4, 9] [1, 2, 3].filter(function(it){ return it % 2; }); // => [1, 3] function isNum(it){ return typeof it == 'number'; } [1, '2', 3].every(isNum); // => false [1, '2', 3].some(isNum); // => true function add(a, b){ return a + b; } [1, 2, 3].reduce(add); // => 6 [1, 2, 3].reduceRight(add, ''); // => '321' 

рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдПрд░реЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЬреЗрдирд░рд┐рдХ рд╣реИрдВ рдФрд░ рди рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╕рд░рдгреА рдЬреИрд╕реА рд╡рд╕реНрддреБ, рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ # рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдЗрд╕рд▓рд┐рдП, ES5 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░рдгреА рдХреА рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдкрддреНрд░ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 'string'[2] // => 'r' , рд▓реЗрдХрд┐рди рдкреБрд░рд╛рдиреЗ IE рдореЗрдВ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ Array#slice рдФрд░ Array#join рдХреЛ рдкреБрд░рд╛рдиреЗ IE рдореЗрдВ Array#join ред

 Array.prototype.map.call('123', function(it){ return it * it; }); // => [1, 4, 9] Array.prototype.slice.call('qwe', 1); // => ['w', 'e'] Array.prototype.join.call('qwe', '|'); // => 'q|w|e' 

рдЦреИрд░, рдкреНрд░рд╛рдЪреАрди рд╕рддреНрдп рдХреЛ рдордд рднреВрд▓рдирд╛: for-in рд▓реВрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХреЛ рдХрднреА рднреА рдмрд╛рдпрдкрд╛рд╕ рди рдХрд░реЗрдВ ред рдпрд╣ рди рдХреЗрд╡рд▓ рдзреАрдорд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд▓ рднреА рд╣реИ, рдЕрдЧрд░ IE8- рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреБрдВрдЬреА рдЙрдЪрд┐рдд рд╣реИ - рдЕрдиреНрдпрдерд╛, рди рдХреЗрд╡рд▓ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рддрд░реАрдХреЗ рднреА :)

# рд╕реНрдЯреЗрдЯрд┐рдХ рдореЗрдердб Array.isArray рдЙрд╕реА рд╢реНрд░реЗрдгреА рдХрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдпрд╣ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ # рджреВрд╕рд░реЗ, рд╕рд╛рдЗрдХрд┐рд▓, рд▓реЗрдЦ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ ред

 Array.isArray([1, 2, 3]); // => true Array.isArray(Object.create(Array.prototype)); // => false 

# рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдкреАрдЖрдИ


ECMAScript 3 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рднреА ECMAScript 5 рдСрдмреНрдЬреЗрдХреНрдЯ API рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкреВрд░реНрдг рдЕрдиреБрдХрд░рдг рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдХрдИ рдХреЗ рд▓рд┐рдП рдЖрдВрд╢рд┐рдХ - рд╕рдВрднрд╡ рд╣реИред ES5, рдСрдмреНрдЬреЗрдХреНрдЯ API рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ: рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ (рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ / рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛), рдСрдмреНрдЬреЗрдХреНрдЯ рдХреАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ред

# Object.create рд╡рд┐рдзрд┐ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред null рдЧреБрдЬрд░рдиреЗ рд╕реЗ, рдЖрдк рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ ECMAScript 3 рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЖрдкрдХреЛ iframe рдЖрдзрд╛рд░ рдкрд░ рднрдпрдВрдХрд░ рдХрдЪрд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рд╣рдореЗрдВ # рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ Object.defineProperties рд╕рдорд╛рди # рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

 function Parent(/*...*/){ /*...*/ } Parent.prototype = {constructor: Parent /*, ... */} function Child(/*...*/){ Parent.call(this /*, ...*/); // ... } //   ES3 (  inherit  extend'): function Tmp(){} Tmp.prototype = Parent.prototype; Child.prototype = new Tmp; Child.prototype.constructor = Child; //   ES5: Child.prototype = Object.create(Parent.prototype, {constructor: {value: Child}}); var dict = Object.create(null); dict.key = 42; console.log(dict instanceof Object); // => false console.log(dict.toString) // => undefined console.log(dict.key) // => 42 

# Object.getPrototypOf рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓реМрдЯрд╛рддреА рд╣реИред ECMAScript 3 рдореЗрдВ, рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ constructor рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк constructor.prototype ред Object.create рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ # рдкреНрд░рддреАрдХ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдФрд░ рдЬрдм рд╣рдо # рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рддреЛ рд╣рдо рдЗрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдкрд░, "рд╕рд╣реА" constructor рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд┐рд╕ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, Object.getPrototypeOf рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

 var parent = {foo: 'bar'} , child = Object.create(parent); console.log(Object.getPrototypeOf(child) === parent); // => true function F(){} console.log(Object.getPrototypeOf(new F) === F.prototype); // => true F.prototype = {constructor: F /*, ...*/}; console.log(Object.getPrototypeOf(new F) === F.prototype); // => true F.prototype = {}; console.log(Object.getPrototypeOf(new F) === F.prototype); //  IE8-    

# Object.keys рд╡рд┐рдзрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреА рдЧрдгрдирд╛ рдХреА рд╣реБрдИ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддреА рд╣реИред Object.getOwnPropertyNames , рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рд╕реНрд╡рдпрдВ рдХреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрддрд╛ рд╣реИ, inclред рдФрд░ рдЧреИрд░-рд╕реВрдЪреАрдмрджреНрдзред Object.keys рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ - for-in рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ Object.keys рдХрд░реЗрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЧреБрдг рд╕реНрд╡рд╛рдорд┐рддреНрд╡ рд╣реИрдВред рдпрджрд┐ рдЖрдИрдИ рдореЗрдВ "рдиреЙрди-рдПрдиреБрдореЗрд░рд┐рдмрд▓" рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рдЧреБрдгреЛрдВ рд╡рд╛рд▓реЗ рдмрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рддреЛ рдЖрдкрдХреЛ рдРрд╕реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреА рд╣реЛрдЧреАред рдЗрд╕реА рддрд░рд╣, рдЙрдкрд▓рдмреНрдз рдЫрд┐рдкреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде, Object.getOwnPropertyNames рднреА Object.getOwnPropertyNames ред

 console.log(Object.keys({q: 1, w: 2, e: 3})); // => ['q', 'w', 'e'] console.log(Object.keys([1, 2, 3])); // => ['0', '1', '2'] console.log(Object.getOwnPropertyNames([1, 2, 3])); // => ['0', '1', '2', 'length'] 

# рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИ, ECMAScript 3 рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред Object#__define[GS]etter__ рдкрд╛рд╕ Object#__define[GS]etter__ рд▓реЗрдХрд┐рди Object.defineProperty рдЧрд╛рдпрдм рд╣реИрдВ рд╡рд┐рд▓реБрдкреНрдд рд╣реЛ рдЧрдП рд╣реИрдВред рдкреБрд░рд╛рдиреЗ IE рдореЗрдВ, VBScript рдХреЗ рд╕рд╛рде рд╡рд┐рдХреГрддрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИред enumerable: false рд╡рд╣рд╛рдБ рдЧреБрдг рд╣реИрдВ, рд╡реЗ рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ # propertyIsEnumerable рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕рд╛ рд╣реИред IE8 рдореЗрдВ рд╡рд░реНрдгрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рдереЗ (рд╡реЗ рдХреЗрд╡рд▓ DOM рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ)ред рдЗрд╕рд▓рд┐рдП, рд╣рдо IE8- рд╕реНрдЯрдмреНрд╕ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Object.defineProperty рдФрд░ Object.defineProperties рдореЗрдВ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ value рдЕрдиреБрд╕рд╛рд░ рдкреНрд░реЙрдкрд░реНрдЯреА value рд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ Object.getOwnPropertyDescriptor рдореЗрдВ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ value рдФрд░ рдПрдиреЗрдмрд░реЗрдмрд▓ рд╣реЛрдирд╛ ред

# Object.freeze, Object.preventExtensions, Object.seal рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рд╕реНрдЯрдмреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рди рдХреЗрд╡рд▓ рдЙрдирдХрд╛ рдЕрдиреБрдХрд░рдг рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ:
Object.freeze, Object.preventExtensions, Object.seal, рдХреЗ рд╕рд╛рде, eval
рдкрд╛рдЧрд▓ рдмрдХрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЖрдк рд╢рд╛рдпрдж рдХрднреА рдирд╣реАрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рд╕реЗ рджреВрд░ рд░рд╣реЗрдВред
- рдлреЗрд▓рд┐рдХреНрд╕ рдЧрд┐рд╕реЗрдиреНрдбреНрд░реЙрдлрд╝рд░
рдФрд░ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЙрд╕рдХреЗ рд╕рд╛рде рд╕рд╣рдордд рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд░реЛред

# рдЕрдиреНрдп


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

 var fn = console.log.bind(console, 42); fn(43); // => 42 43 

# Date.now рдкрджреНрдзрддрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд▓реМрдЯрд╛рддреА рд╣реИ, рдкрд░рд┐рдгрд╛рдо +new Date рдХреЗ рд╕рдорд╛рди рд╣реИред

 Date.now(); // => 1400263401642 

# рд╕реНрдЯреНрд░рд┐рдВрдЧ # рдЯреНрд░рд┐рдо рд╡рд┐рдзрд┐ рдПрдХ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рд╕реЗ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдХреЛ рд╣рдЯрд╛рддреА рд╣реИред

 '\n  \n'.trim(); // => '' 

JSON рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ IE8 рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдФрд░, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдЧреИрддрд┐рд╣рд╛рд╕рд┐рдХ IE рдореЗрдВ рд╣реИ - рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреЙрд▓реАрдлрд╛рдЗрд▓ред

# ECMAScript 6



рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдХрднреА рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 4 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдВрддрд┐рдо рд╕рд╣рд╕реНрд░рд╛рдмреНрджреА рдореЗрдВ рдЕрдкрдирд╛рдИ рдЧрдИ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3 рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рднрд╛рд╖рд╛ рд▓рдЧрднрдЧ рдкреВрд░реА рд╣реЛ рдЪреБрдХреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдФрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, ECMAScript 6 рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдиред рдЗрд╕рдХреЗ рд▓рд┐рдП рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЬреЛрдбрд╝ рдЬрдореА рд╣реИ, рд╕рднреА рдкреНрд░рдореБрдЦ рдкрд░рд┐рд╡рд░реНрддрди ECMAScript 7 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдорд╕реМрджрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╣рд╛рд▓рд┐рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдЧ рд╕реБрдзрд╛рд░ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ ES6 рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред

рд╡рд░реНрддрдорд╛рди рдЗрдВрдЬрди рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред


рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдИрдПрд╕ 6 рдкреЙрд▓реАрдлрд╛рдЗрд▓ рдкреЙрд▓рд┐рдорд┐рд▓рд░ рдПрд╕ 6 - рд╢рд┐рдо рд╣реИ ред

рдорд╛рдирдХ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 6 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Proxy (рдФрд░ рдпрд╣ рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ), рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХрдо рд╕реЗ рдХрдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ "рдмреЗрдИрдорд╛рдиреА рд╕реЗ"ред

рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ ECMAScript 6+


рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдлрд┐рд░, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рд╣рдо рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░реНрд╕ рдпрд╣рд╛рдВ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ, ECMAScript 6 рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ ECMAScript 3 рдпрд╛ 5 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдЖрдЗрдП рдХреЗрд╡рд▓ рдХреБрдЫ рд▓реЛрдХрдкреНрд░рд┐рдп рд▓реЛрдЧреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

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

рдПрдХ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореБрдЭреЗ рдФрд░ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рд▓рдЧрддреА рд╣реИ - 6to5 ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рддрд╛рдЬрд╛ рд╣реИ рдФрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣реА рд╣реИредрдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкреБрдирд░реНрдЬрдирди рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрдирд░реЗрдЯрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡рд╣ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдорд╛рдирдХ ES6 рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, #Symbol.iterator ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ es6- рд╢рд┐рдо рдФрд░ es6- рдкреНрд░рддреАрдХ рд╣реИ ред рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рдПрдХ рдЖрджрд░реНрд╢ рдЬреЛрдбрд╝реА рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдХреЛ ECMAScript 5 рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реИ - рд╡рд┐рдзрд┐ рд╕реНрдЯрдмреНрд╕ рдЬреИрд╕реЗ #Object.defineProperties рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдкреБрд░рд╛рдиреЗ IE рдореЗрдВ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

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

рдореИрдВрдиреЗ 6to5 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ ES6 рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдзрд╛рд░рдг рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ рдФрд░ рдХреЛрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ред рдкреБрд╕реНрддрдХрд╛рд▓рдп , рдЙрджрд╛рд╣рд░рдг рдЗрд╕рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рд╣реЛрдВрдЧреЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА ECMAScript 6 рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдЬреБрдбрд╝реА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛рддрд░ рдЙрджрд╛рд╣рд░рдг ECMAScript рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред



рдареАрдХ рд╣реИ, рдЕрдм рдЪрд▓реЛ рдорд╛рдирдХ ECMAScript 6 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ рдирдП рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ , рдпреЗ #characters , # рд╕рдВрдЧреНрд░рд╣ , # рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ # рд╡рд╛рджреЗ рд╣реИрдВ , рд╣рдо рдпрд╣рд╛рдВ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред

# рдСрдмреНрдЬреЗрдХреНрдЯ.рдмреЗрд╕рд┐рди


рдпрд╣ рд╡рд┐рдзрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдереАред Object.assign corny рд╕реЛрд░реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ (рдУрдВ) рдХреЗ рд╕рднреА рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рдЧреБрдгреЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var foo = {q: 1, w: 2} , bar = {e: 3, r: 4} , baz = {t: 5, y: 6}; Object.assign(foo, bar, baz); // => foo = {q: 1, w: 2, e: 3, r: 4, t: 5, y: 6} 

рдпрд╣ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА Object.mixinрдЬрд┐рд╕рдореЗрдВ рдЧреИрд░-рд╡рд┐рд▓реБрдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рднреА рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдФрд░ рдХреАрд╡рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрднрд┐рднрд╛рд╡рдХреЛрдВ рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛ superред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ # рд╕рд╛рдЗрдХрд┐рд▓ рдкрд╛рд░реНрдЯ рдореЗрдВ рд╣реИ ред

# рд╡рд╕реНрддреБ


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдЖрдорддреМрд░ рдкрд░ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред ==рдЕрдкрдиреЗ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдРрд╕реЗ рдСрдкрд░реЗрдЯрд░ рдХреЛ рднреВрд▓ рдЬрд╛рдЗрдП , рджреЗрдЦрд┐рдП ===:

 NaN === NaN // => false 0 === -0 // => true,   : 1/0 === 1/-0 // => false 

рдмрд╕ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕реЗрдорд╡реИрд▓реНрдпреВ рддреБрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ ред рдЗрд╕рдХреЗ рд▓рд┐рдП NaNрд╣реИ NaN, рдФрд░ +0рдФрд░ -0рдЕрд▓рдЧред ECMAScript 6 рдореЗрдВ, рд╡реЗ рдЗрд╕реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рд╣рд░ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ isрдФрд░ isnt, рд▓реЗрдХрд┐рди, рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рднрд╛рд╖рд╛ рдореЗрдВ рддреБрд▓рдирд╛рддреНрдордХ рдСрдкрд░реЗрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ Object.is рдкрджреНрдзрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 Object.is(NaN, NaN); // => true Object.is(0, -0); // => false Object.is(42, 42); // => true,  '===' Object.is(42, '42'); // => false,  '===' 

# рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ ES6 рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдФрд░ рддреБрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕реЗрдорд╡реЗрд▓реНрдпреВрдЬрд╝реЗрд░реЛ , рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ NaNрдмрд░рд╛рдмрд░ рд╣реИ NaN, рдФрд░, рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, -0рдмрд░рд╛рдмрд░ рд╣реИ +0ред рдпрд╣ # рд╕рдВрдЧреНрд░рд╣ рдХреБрдВрдЬреА рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ ; рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ # рдХреЗArray#includes рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

# Object.setPrototypOf


рдИрдПрд╕ 6 рдореЗрдВ, рдореМрдЬреВрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ Object.setPrototypeOfред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 function Parent(){} function Child(){} Object.setPrototypeOf(Child.prototype, Parent.prototype); new Child instanceof Child; // => true new Child instanceof Parent; // => true function fn(){} Object.setPrototypeOf(fn, []); typeof fn == 'function'; // => true fn instanceof Array; // => true var object = {}; Object.setPrototypeOf(object, null); object instanceof Object; // => false 

рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдРрд╕рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрд╡рд╕рд░ - рджреЗрдЦреЛ, рдХрдо рд╕реЗ рдХрдо рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг - рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рд░рд╛рд╕рдд рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ __proto__ред рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рд╕рднреА рдореМрдЬреВрджрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ IE10- рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЧреЗрдЯрдЯрд░ / рд╕реЗрдЯрд░ Objectред

рдЖрджрд┐рдо, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪ рдФрд░ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕реА рдХреЗ рдмрд┐рдирд╛, рд╕рдВрд╕реНрдХрд░рдг Object.setPrototypeOfрд╕рд░рд▓ рджрд┐рдЦреЗрдЧрд╛ - рд╕реЗрдЯрд░ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ __proto__рдФрд░ рдЗрд╕рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ:

 var setPrototypeOf = Function.call.bind(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set); 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ - рдкреБрд░рд╛рдиреЗ рдореЗрдВ, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, v8 рдХреЗ рд╕рдВрд╕реНрдХрд░рдг, рд╕реЗрдЯрд░ __proto__рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП Object.setPrototypeOf, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ __proto__ред

рдЗрд╕рд▓рд┐рдП рд╣рдо рдЬреАрддреЗ рд╣реИрдВ:


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ECMAScript 6 рдФрд░ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛рдо рдХреЗ рддрд░реНрдХ рдХреЛ рдмрджрд▓ рд░рд╣реА рд╣реИ Object#toStringред рд╡рд┐рд╖рдп рдЧрдВрднреАрд░ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ # рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ ред

# рдРрд░реЗ рддрд░реАрдХреЗ


рд╕реНрдЯреЗрдЯрд┐рдХ рддрд░реАрдХреЗ Array.fromрдФрд░ Array.of- рдЬреЗрдиреЗрд░рд┐рдХ, рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ ArrayрдЗрд╕рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирдИ рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ ред

# ECMAScript 6 рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ -Array.fromред рдпрд╣ # iterable рдФрд░ array-like рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗрд▓рд┐рдП рдПрдХ рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдХрд╛рд╕реНрдЯ рд╣реИред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣Array.prototype.slice.callрд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЗ рдкрджреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛рдмрджрд▓ рджреЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╡рд┐рдзрд┐ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЙрд▓рдмреИрдХ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред рдорд╛рдирдЪрд┐рддреНрд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдорд╕рд░рдгреА рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ # рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ-[...iterable]ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 Array.from(new Set([1, 2, 3, 2, 1])); // => [1, 2, 3] Array.from({0: 1, 1: 2, 2: 3, length: 3}); // => [1, 2, 3] Array.from('123', Number); // => [1, 2, 3] Array.from('123', function(it){ return it * it; }); // => [1, 4, 9] 

# рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, Array.of рдкрджреНрдзрддрд┐рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдПArray, рдПрдХ рд╕рд░рдгреА рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд░реВрдк рдореЗрдВ[]ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 Array.of(1); // => [1] Array.of(1, 2, 3); // => [1, 2, 3] 

# рддрд░реАрдХреЗ рд╕рд░рдгреА # рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рд░рдгреА # findIndex рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рд╕рд░рдгреА рд▓реЗ рдЧрдПред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 function isOdd(val){ return val % 2; } [4, 8, 15, 16, 23, 42].find(isOdd); // => 15 [4, 8, 15, 16, 23, 42].findIndex(isOdd); // => 2 [4, 8, 15, 16, 23, 42].find(isNaN); // => undefined [4, 8, 15, 16, 23, 42].findIndex(isNaN); // => -1 

# рдПрд░реЗ рд╡рд┐рдзрд┐ # рдПрд░реЗ # рднрд░реЗрдВ рд╕рд░рдгреА рдХреЛ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рднрд░рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ - рдкрджреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 Array(5).map(function(){ return 42; }); // => [undefined ├Ч 5],   .map  ""   Array(5).fill(42); // => [42, 42, 42, 42, 42] 

# рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ


рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╕реНрдЯреНрд░рд┐рдВрдЧ # рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ (рд╣рд╛рд▓ рд╣реА рдореЗрдВ рддрдХ - String#containsрд▓реЗрдХрд┐рди #Array#includes рдЗрд╕реЗ рд╕рд╛рде рд▓рд┐рдпрд╛, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдкреБрд░рд╛рдиреЗ рдирд╛рдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЪреЗрдХред рд╕реНрдЯреНрд░рд┐рдВрдЧ # рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ # рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдпреЗ 3 рд╡рд┐рдзрд┐рдпрд╛рдБ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд▓реЗрддреА рд╣реИрдВ - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 'foobarbaz'.includes('bar'); // => true 'foobarbaz'.includes('bar', 4); // => false 'foobarbaz'.startsWith('foo'); // => true 'foobarbaz'.startsWith('bar', 3); // => true 'foobarbaz'.endsWith('baz'); // => true 'foobarbaz'.endsWith('bar', 6); // => true 

рд╕реНрдЯреНрд░рд┐рдВрдЧ # рд░рд┐рдкреАрдЯ рд╡рд┐рдзрд┐ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рджреЛрд╣рд░рд╛рддреА рд╣реИ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 'string'.repeat(3); // => 'stringstringstring' 

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдиреЗ рдЕрднреА рддрдХ рдорд▓реНрдЯреАрдмреИрдЯ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд░реНрдерди рдФрд░ рдПрдХ рдИрдорд╛рдирджрд╛рд░ # рд▓рд╛рдЗрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП ECMAScript 6/7 рддрд░реАрдХреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ; рддрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдЗрдЯрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╡реЗ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

# рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ


ECMAScript 6 рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдмрд╛рдВрдЯрдирд╛, рдХреЗрд╡рд▓ рд▓рд┐рдВрдХ: Number.EPSILON , Number.parseFloat , Number.parseInt , Number.isFinite , Number.isInteger , Number.isNaN , Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, Number.isSafeInteger , Math.acosh , Math.asinh , Math.atanh , Math.cbrt , Math.clz32 , Math.cosh , Math.expm1 , Math.hypot , Math.imul ,Math.log1p , Math.log10 , Math.log2 , Math.sign , Math.sinh , Math.tanh , Math.trunc ред

# ECMAScript 6: рдкреНрд░рддреАрдХ



рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЫрд┐рдкрд╛рдирд╛ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИред рдирд┐рдЬреА рдбреЗрдЯрд╛ рдХреЛ рдХреНрд▓реЛрдЬрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдЕрдВрджрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ, рди рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВред ECMAScript 5 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░, рдЖрдк рдРрд╕реЗ enumerable: falseрдЧреБрдгреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдПрдиреНрдпреВрдорд░реЗрдЯ рдХрд░рдиреЗ рд╕реЗ for-inрдФрд░ Object.keysрдЙрд╕рд╕реЗ рдЫрд┐рдкрд╛рдПрдВрдЧреЗ , рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЫрд┐рдкрд╛рдИ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ - рдХреБрдВрдЬреА рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдирд╛рдо рдЯрдХрд░рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░, Object.definePropertyрдПрдХ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣ рдмрд▓реНрдХрд┐ рдмреЛрдЭрд┐рд▓ рд╣реИред

ECMAScript 6 рдПрдХ рдирдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддреАрдХ , рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рдирд╛рдо рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ , рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдЕрдиреВрдареА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИредрдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var Person = (function(){ var NAME = Symbol('name'); function Person(name){ this[NAME] = name; } Person.prototype.getName = function(){ return this[NAME]; }; return Person; })(); var person = new Person(''); console.log(person.getName()); // => '' console.log(person['name']); // => undefined console.log(person[Symbol('name')]); // => undefined,   Symbol    for(var key in person)console.log(key); // =>  'getName',       console.log(typeof Symbol()); // => 'symbol' 

рдкреНрд░рддреАрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдЬреА рдирд╣реАрдВ рд╣реИрдВ - рд╡рд┐рдзрд┐ Object.getOwnPropertySymbolsрдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рддреАрдХреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓реЛрдирд┐рдВрдЧ рдЬреИрд╕реЗ рдбрд┐рдмрдЧ рдФрд░ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╕рдВрдЪрд╛рд▓рди рд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдирд┐рдЬреА рдбреЗрдЯрд╛ рдХрд╛ рднрдВрдбрд╛рд░рдг # рдХрдордЬреЛрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рд╣рд╛рд▓рд╛рдВрдХрд┐, IMHO, рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╕рдлрд▓ рд╕рдорд╛рдзрд╛рди рд╡рд░реНрдгреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдЬреА рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╡рд░реНрдг V8 рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдХреНрд░реЛрдо 38 (рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ # - рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЭрдВрдбреЗ рдХреЗ рд╕рд╛рде ) рдФрд░ рд░рд╛рдд рдореЗрдВ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ, 33 рдХреЗ рд╕рд╛рде рд╢реБрд░реВред рд╡реЗ рдЬрд▓реНрдж рд╣реА IE рдореЗрдВ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдмрд╣реБрдд рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрд╣ рд╕рднреА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдкреНрд░рдореБрдЦ рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ред

# рдмреЗрд╢рдХ, ES5 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рдкреВрд░реНрдг-рдкреЙрд▓реАрдлрд╝рд┐рд▓рд┐рдВрдХ рдЕрд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ - рдЕрджреНрд╡рд┐рддреАрдпрдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗfor-inрдФрд░ рдЧреИрд░-рд╡рд╛рдкрд╕Object.keysрдХрд░рдиреЗрдпреЛрдЧреНрдпрдХреБрдВрдЬрд┐рдпреЛрдВрдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВрд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рдлреА рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:

 window.Symbol || (function(){ var id = 0; window.Symbol = function(description){ if(this instanceof Symbol)throw new TypeError('Symbol is not a constructor'); var symbol = Object.create(Symbol.prototype) , tag = 'Symbol(' + description + ')_' + (++id + Math.random()).toString(36); symbol.tag = tag; Object.defineProperty(Object.prototype, tag, { configurable: true, set: function(it){ Object.defineProperty(this, tag, { enumerable : false, configurable: true, writable : true, value : it }); } }); return symbol; } Symbol.prototype.toString = function(){ return this.tag; } })(); 

рдЬрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, Symbolрд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП "Symbol(description)_m.y9oth2pcqaypsyvi", рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ , рдФрд░ рдЗрд╕ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП Object.prototypeрд╕реЗрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рд╣рдорд╛рд░реЗ "рдЪрд░рд┐рддреНрд░" рдХреЛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕реЗрдЯрд░ enumerable: falseрд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдкрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ "рдкреНрд░рддреАрдХреЛрдВ" рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ:


# рдЕрдЧрд░ рдлреИрд╕рд▓рд╛ рдЗрддрдирд╛ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рддреЛ рд╡рд╣ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд╛рддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡реЗ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдпрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВObject.prototype, рддреЛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреБрдЫ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВредSymbol.pureрдпрджрд┐ рдореВрд▓ рд╡рд░реНрдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬреЛ рдПрдХ рд╡рд░реНрдг рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдирд╣реАрдВ - рдПрдХ рд╕реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИObject.prototypeрдФрд░Symbol.setрдпрджрд┐ рдореВрд▓ рд╡рд░реНрдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВ - рддреЛ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛, рдирд╣реАрдВ -Object.definePropertycрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛enumerable: falseред рдЗрд╕ рдЖрджрд┐рдо рддрд░реАрдХреЗ рд╕реЗ, рд╣рдо рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЖрдзреЗ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛ рд╣реЗрд▓реНрдкрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдЗрд╕Symbol рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 var Person = function(){ var NAME = Symbol.pure('name'); function Person(name){ Symbol.set(this, NAME, name); } Person.prototype.getName = function(){ return this[NAME]; }; return Person; }(); 

# рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ,Object.getOwnPropertySymbolsрд╣рдо рдПрдХрд╡рд┐рдзрд┐рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдФрд░ рдореИрдВ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд╛рдирдХреАрдХреГрдд, рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ, рджреЛрдиреЛрдВ рддрд╛рд░реЛрдВ рдФрд░ рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред ECMAScript 6 рдПрдХ рдХрд╣рддреЗ рд╣реИрдВ рдореЙрдбреНрдпреВрд▓Reflect рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ, - рдкреНрд▓рдЧ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдПProxyред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИProxy,Reflectрд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХрдореЙрдбреНрдпреВрд▓ рдХреАрдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИReflect.ownKeysрдЬреЛ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЕрдкрдиреА рдЪрд╛рдмрд┐рдпрд╛рдБ рд▓реМрдЯрд╛рддреА рд╣реИ - рджреЛрдиреЛрдВ рддрд╛рд░ рдФрд░ рд╡рд░реНрдг, рдЕрд░реНрдерд╛рддреНредObject.getOwnPropertyNames + Object.getOwnPropertySymbolsред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var O = {a: 1}; Object.defineProperty(O, 'b', {value: 2}); O[Symbol('c')] = 3; Reflect.ownKeys(O); // => ['a', 'b', Symbol(c)] 

# ES6 рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдмрд╛рдд рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ - Symbol.for рдФрд░ Symbol.keyFor ред Symbol.forрдпрд╣ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреА-рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╡рд░реНрдг рджреЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИ - рдПрдХ рдирдпрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред Symbol.keyForрдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╡рд░реНрдг рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var symbol = Symbol.for('key'); symbol === Symbol.for('key'); // true Symbol.keyFor(symbol); // 'key' 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ #Symbol.iterator рдФрд░ #Symbol.toStringTag рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред

# ECMAScript 6: рд╕рдВрдЧреНрд░рд╣



ECMAScript 6 рдореЗрдВ 4 рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рд╣реИрдВ: Map, Set, WeakMapрдФрд░ WeakSetред рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрд░реЗрдЬрд╝ рднреА рд╣реИрдВ , рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЙрдирдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


# рддреЛ, рдпреЗ рд╕рдВрдЧреНрд░рд╣ рдХреНрдпрд╛ рд╣реИрдВ?

# рдорд╛рдирдЪрд┐рддреНрд░ - рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣, рдХреЛрдИ рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрдХрд╛рдЗрдпрд╛рдВ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреА рд╣реИрдВ - рджреЛрдиреЛрдВ рдореВрд▓ рдФрд░ рд╡рд╕реНрддреБрдПрдВред рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ - рдЙрдирдХреЗ рдкрд╛рд╕ # рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ.forEach, рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ.sizeред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var a = [1]; var map = new Map([['a', 1], [42, 2]]); map.set(a, 3).set(true, 4); console.log(map.size); // => 4 console.log(map.has(a)); // => true console.log(map.has([1])); // => false console.log(map.get(a)); // => 3 map.forEach(function(val, key){ console.log(val); // => 1, 2, 3, 4 console.log(key); // => 'a', 42, [1], true }); map.delete(a); console.log(map.size); // => 3 console.log(map.get(a)); // => undefined console.log(Array.from(map)); // => [['a', 1], [42, 2], [true, 4]] 

# рд╕реЗрдЯ - рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ред рд╕рд╛рде рдореЗрдВMap, рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var set = new Set(['a', 'b', 'a', 'c']); set.add('d').add('b').add('e'); console.log(set.size); // => 5 console.log(set.has('b')); // => true set.forEach(function(it){ console.log(it); // => 'a', 'b', 'c', 'd', 'e' }); set.delete('b'); console.log(set.size); // => 4 console.log(set.has('b')); // => false console.log(Array.from(set)); // => ['a', 'c', 'd', 'e'] 

# рдХрдордЬреЛрд░ - рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣, рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдХрдордЬреЛрд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЬрдм рдХреБрдВрдЬреА рдСрдмреНрдЬреЗрдХреНрдЯ (рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛) рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рднреА рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рдЪрд╛рд░реЛрдВ рдУрд░ рдкрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИ - рдХреЛрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ.forEach, рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ.sizeред рдпрд╣ рдирд┐рдЬреА рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ, рдЕрдзрд┐рдХ "рдИрдорд╛рдирджрд╛рд░", рд▓реЗрдХрд┐рди # рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди ред рдпрджрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдореВрд░реНрдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕реЗ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var a = [1] , b = [2] , c = [3]; var wmap = new WeakMap([[a, 1], [b, 2]]); wmap.set(c, 3).set(b, 4); console.log(wmap.has(a)); // => true console.log(wmap.has([1])); // => false console.log(wmap.get(a)); // => 1 wmap.delete(a); console.log(wmap.get(a)); // => undefined //      var Person = (function(){ var names = new WeakMap; function Person(name){ names.set(this, name); } Person.prototype.getName = function(){ return names.get(this); }; return Person; })(); var person = new Person(''); console.log(person.getName()); // => '' for(var key in person)console.log(key); // =>  'getName' 

# рдХрдордЬреЛрд░ - рдареАрдХ рд╣реИ, рддреБрдо рдмрд╛рдд рдХрд░ рд▓реЛ ред рдпрд╣ рдбреНрд░рд╛рдлреНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдХрдордЬреЛрд░ рд╕рдорд░реНрдерди рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var a = [1] , b = [2] , c = [3]; var wset = new WeakSet([a, b, a]); wset.add(c).add(b).add(c); console.log(wset.has(b)); // => true console.log(wset.has([2])); // => false wset.delete(b); console.log(wset.has(b)); // => false 

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

# рдЖрдзреБрдирд┐рдХ js рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдЗрди рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпрд╛ рд╣реИ? рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ред


рд▓рдЧрднрдЧ рд╕рднреА рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрдЧреНрд░рд╣ рддрд░реАрдХреЛрдВ .addрдФрд░ .setрд╡рд╛рдкрд╕ рдирд╣реАрдВ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ this- рд╕рдВрдЧреНрд░рд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЗрд▓рд╛рдЬ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЦреИрд░, рдЦреБрдж рд╕рдВрдЧреНрд░рд╣ рдХреА рдкреЙрд▓реАрдлрд┐рд▓реЛрдВ рдкрд░ рдЖрдЧреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред ECMAScript 5 рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЗрди рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХрд╛ рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди - рддреЗрдЬ, рдлрд┐рд░ рднреА рд╕рд╛рдл рдФрд░ рдореЗрдореЛрд░реА рд▓реАрдХ рдХреЗ рдмрд┐рдирд╛ (WeakMap рдХреЗ рдмрд┐рдирд╛) рдЕрд╕рдВрднрд╡ рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдПрдХ рдЙрдЪрд┐рдд рд╕рдордЭреМрддрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

# рдорд╛рдирдЪрд┐рддреНрд░ рдФрд░ рд╕реЗрдЯ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреНрдпрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ Map? рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ Map- 2 рд╕рд░рдгрд┐рдпрд╛рдБ, рдХреБрдВрдЬрд┐рдпрд╛рдБ рдФрд░ рдорд╛рдиред рддрддреНрд╡ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдкрд░, рд╣рдо рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдореИрдЪ рдХреА рддрд▓рд╛рд╢ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪрдХрд╛рдВрдХ рдкрд░ рддрддреНрд╡реЛрдВ рдХреЗ рдорд╛рди рд╕реЗ рддрддреНрд╡ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛, рд╡рд┐рд▓реЛрдкрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реИ? рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ, рдПрдХ рддрддреНрд╡ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХрдард┐рдирд╛рдИ рд╣реЗ (рдПрди) рд╣реИ, рдпреВрдиреАрдХ рдСрдкрд░реЗрд╢рди рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реЗ (рдПрди 2 ) рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдХреИрд╕реЗ рдзрдордХреА рджреЗрддрд╛ рд╣реИ? рдпрд╣рд╛рдБ рдереЛрдбрд╝рд╛ рдкрд░реАрдХреНрд╖рдг рд╣реИ:

 var array = []; for(var i = 0; i < 100000; i++)array.push([{}, {}]); array = array.concat(array); console.time('Map test'); var map = new Map(array); console.timeEnd('Map test'); console.log('Map size: ' + map.size); 

рд╣рдо 200,000 рд╣рдЬрд╝рд╛рд░ рдЬреЛрдбрд╝реА рд╡рд╕реНрддреБрдУрдВ (рднрд╡рд┐рд╖реНрдп рдХреА рдХреБрдВрдЬреА-рдореВрд▓реНрдп) рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ 100,000 рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕рд░рдгреА рд╕реЗ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рддреЗ рд╣реИрдВ Mapред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ

рдореВрд▓ рдПрдХ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ Map:

 Map test:   Map test: 46.25 Map size: 100000 

рдФрд░ рдЕрдм рд╡рд╣рд╛рдБ MapрдХреА рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп Poliphili ECMAScript 6:

 Map test:   Map test: 506823.31 Map size: 100000 

рд▓рдЧрднрдЧ 8.5 рдорд┐рдирдЯред рдЬрдм рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдирдП рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЬреЛрдбрд╝реЗ рдЧрдП 100,000 рддрдХ рдЫрд╛рдБрдЯрдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд╕реЗ рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗрд╡рд▓ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред

рд╣реИрд╢ рдЯреЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдмрд▓рд╛рдЗрдирд┐рдпрд░ рдкреЙрд▓реАрдлрд┐рд▓ рдЧрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред ECMAScript 5 рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ ObjectрдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд▓реЗ рд░рд╣рд╛ рд╣реИред рдКрдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкреЙрд▓реАрдлрд╛рдЗрд▓ рдореЗрдВ, рдПрдХ рдЫреЛрдЯрд╛ рдЕрдиреБрдХреВрд▓рди рд╣реИ - рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдВрдЬреА-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рд╕реВрдЪрдХрд╛рдВрдХ рдЬреЛ рдУ (1) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЖрдЗрдЯрдо рдЦреЛрдЬрдиреЗ рдХреА рдФрд╕рдд рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ:

 function fastKey(key){ if(typeof key === 'string')return '$' + key; else if(typeof key === 'number')return key; return null; }; 

рдЙрд╕реА рддрд░рд╣, рдЖрдк рдЕрдиреНрдп рдЖрджрд┐рдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдкрд╣реБрдБрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ Map, рдЬрд┐рд╕рдХреА рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓ рдЖрджрд┐рдо рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? # рдЗрд╕рд╕реЗ рдореБрдХрд╛рдмрд▓рд╛Object.create(null) рд╣реЛрддрд╛ рд╣реИ ред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдпрдореЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рддреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдореБрдЦреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд╝рд╛рдпрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рддреАрдХ рдЬреЛрдбрд╝реЗрдВред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

 var STOREID = Symbol('storeId') , id = 0; function fastKey(it){ //    'S'      'P'    if(it !== Object(it))return (typeof it == 'string' ? 'S' : 'P') + it; //      -  if(!Object.hasOwnProperty.call(it, STOREID))it[STOREID] = ++id; //     'O' return 'O' + it[STOREID]; } 

рд╣рдо Map2 рд╕рд░рдгрд┐рдпреЛрдВ рдпрд╛ рддрддреНрд╡ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди 2 рд╣реИрд╢ рдкрд░ Object, рдЪрд╛рдмрд┐рдпрд╛рдБ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдХреНрд░рдо рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреБрдВрдЬреА / рдореВрд▓реНрдп рдХреА рджреБрдХрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рд╕рднреА рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ, рд╕рдВрдЦреНрдпрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЗрд╕рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣рд╛рдВ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдкрддреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВред рдХреБрд▓ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:

 Map test:   Map test: 669.93 Map size: 100000 

рдмреЗрд╢рдХ, рдпрд╣ рдореВрд▓ рд▓реЛрдЧреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИ, рд▓реЗрдХрд┐рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╣рд╛рдВ, рд╣рдо рдПрдХ рдХреБрдВрдЬреА-рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рд╕рдВрдкрддреНрддрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ - рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ # рдЬрдореЗ рд╣реБрдП рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ , рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдЧрддрд┐ рдорд┐рд▓рддреА рд╣реИред SetрдЗрд╕реА рддрд░рд╣, 1 рд╣реИрд╢ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

# рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛


рдХрдордЬреЛрд░ рдпреБрдЧреНрдорд┐рдд рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИред рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ, рд╡рд┐рдзрд┐ .forEach, рдЧреБрдг рдирд╣реАрдВ рд╣реИрдВ .sizeред рдХреБрдВрдЬреА рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╡рд╕реНрддреБ рдореЗрдВ рдореВрд▓реНрдпреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╢рд┐рдерд┐рд▓ рдпреБрдЧреНрдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдХреБрдВрдЬрд┐рдпреЛрдВ / рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд╣рдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдо рдПрдХ рдЫреАрди рдиреАрдЪреЗ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд SetрдФрд░ Mapред рдПрдХрдорд╛рддреНрд░ рдпрд╛ рдХрдо рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЬреНрдЮрд╛рдд рд╣реИ - рдПрдХ рдХреБрдВрдЬреА рдкрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╡рд╕реНрддреБ рдореЗрдВ рдЗрд╕рдХреА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ред рдЪреВрдВрдХрд┐ рдорд╛рди рдХреБрдВрдЬреА рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреА рдЧреЛрдкрдиреАрдпрддрд╛ рдкреЙрд▓реАрдлрд╛рдЗрд▓ рдореЗрдВ рдЦреЛ рдЬрд╛рддреА рд╣реИред

рдЙрдирдХрд╛ рд╕рд░рд▓реАрдХреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 window.WeakMap || (function(){ var id = 0 , has = Function.call.bind(Object.prototype.hasOwnProperty) , WEAKDATA = Symbol('WeakData') , ID = Symbol('ID'); window.WeakMap = function(){ if(!(this instanceof WeakMap))throw TypeError(); this[ID] = id++; } Object.assign(WeakMap.prototype, { 'delete': function(key){ return this.has(key) && delete key[WEAKDATA][this[ID]]; }, has: function(key){ return key === Object(key) && has(key, WEAKDATA) && has(key[WEAKDATA], this[ID]); }, get: function(key){ if(key === Object(key) && has(key, WEAKDATA))return key[WEAKDATA][this[ID]]; }, set: function(key, value){ if(key !== Object(key))throw TypeError(); if(!has(key, WEAKDATA))key[WEAKDATA] = {}; key[WEAKDATA][this[ID]] = value; return this; } }); })(); 

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

 // <-   snapshot 1 var array = []; for(var i = 0; i < 100000; i++)array[i] = {}; var wm = new WeakMap(); for(var i = 0; i < 100000; i++)wm.set(array[i], {}); // <-   snapshot 2 array = null; // <-   snapshot 3 



рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореЗрдореЛрд░реА рд▓реАрдХ рдХреА рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИред рд╕рдВрдЧреНрд░рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореВрд▓реНрдп рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд░рд╣реЗрдЧрд╛, рдЬреЛ рдХрд┐ рдХреБрдВрдЬреА рдХреЛ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рддрдХ рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рддреЛ рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрдЧреНрд░рд╣ WeakMapрдЙрдирдХреА рдХреБрдВрдЬреА рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЬреАрд╡рд┐рдд рд░рд╣реЗред рдХреЛрдИ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рдЧреВрдврд╝рддрд╛рд╡рд╛рдж рдХреА рд╢реНрд░реЗрдгреА рд╕реЗ рд╣реИ - рд╕реНрдореГрддрд┐ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд▓реАрдХ рд╣реЛрддреА рд╣реИ ред рдпрд╣ рд╕рдорд╕реНрдпрд╛

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

# ECMAScript 6: рдЗрдЯрд░реЗрдЯрд░



ECMAScript 6 рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ - рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рддрд░реАрдХрд╛, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдЪреВрдВрдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рднреА рдЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдЖрдЗрдП рд╣рдо рдЙрди рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдЗрдЯрд░реЗрдЯрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:


рдЪреВрдВрдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рд╣рдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ $forрдЬреЛ рдЗрди рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрджрд┐ рдЖрдк # ES6 + рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреЗ рд╣реИрдВ , рддреЛ рдЖрдк рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд┐рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

# рдПрдХ рдЗрдЯреЗрд░реЗрдЯрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ.nextрдЬреЛ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП.done- рдХреНрдпрд╛ рдЗрдЯрд░реЗрдЯрд░ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдФрд░.valueрд╡рд░реНрддрдорд╛рди рдЪрд░рдг рдХрд╛ рдореВрд▓реНрдп рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдПрдХ рдкреЙрдЬрд┐рдЯрд┐рд╡ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдЯрд░реЗрдЯрд░ рдмрдирд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд╕рднреА рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЛ 0 рд╕реЗ рджрд┐рдП рдЧрдП ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ )рддрдХ рдмрд╛рдпрдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 function NumberIterator(number){ var i = 0; return { next: function(){ return i < number ? {done: false, value: i++} : {done: true}; } } } var iter = NumberIterator(3); iter.next(); // => {done: false, value: 0} iter.next(); // => {done: false, value: 1} iter.next(); // => {done: false, value: 2} iter.next(); // => {done: true} 

# рдПрдХ iterable рдСрдмреНрдЬреЗрдХреНрдЯ (Iterable) - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдХреА рдХреБрдВрдЬреАSymbol.iteratorрдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рджреЗрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП,Symbol.iteratorрдпрд╣рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИthisред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ):

 Number.prototype[Symbol.iterator] = function(){ return NumberIterator(this); } Array.from(10); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ Symbol.iteratorред рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ, рд╕реНрдерд┐рд░ рдмрд┐рд▓реНрдб рдореЗрдВ, рдЕрднреА рддрдХ рдХреЛрдИ # рд╡рд░реНрдг рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ Symbol.iteratorрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ "@@iterator"ред рд░рд╛рдд рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдкреНрд░рддреАрдХреЛрдВ рдореЗрдВ рднреА рдкреНрд░рддреАрдХ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ Symbol.iterator, рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЗрдЯреНрд░реЗрдЯрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ "@@iterator"ред рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣рдо рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдХреА рдирдХрд▓ рдХрд░реЗрдВрдЧреЗ Symbol.iterator(рд╣рдо рдЗрд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВ) рдФрд░ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рддреЗ рд╣реИрдВ "@@iterator"ред V8 рдореЗрдВ, itter рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рдорд░реНрдерди Chrome 38 рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред

# рдЬреЗрдирд░реЗрдЯрд░ - рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╕реНрддреБ рджреЗрддрд╛ рд╣реИред рд╣рдо рдЙрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВред рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╣рд┐рд╕реНрд╕рд╛ ECMAScript 6. рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдХрд╛рдлреА рд╕рд░рд▓ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ )рджрд┐рдЦрддрд╛ рд╣реИ:

 Number.prototype[Symbol.iterator] = function*(){ for(var i = 0; i < this;)yield i++; } Array.from(10); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

# рд▓реВрдк рдХреЛfor-of рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Iterable рдирдВрдмрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ):

 for(var num of 5)console.log(num); // => 0, 1, 2, 3, 4 

# рдореЗрдВ ECMAScript 6 iskaropki рджреЛрд╣рд░рд╛рдпрд╛String, Array, Map, SetрдФрд░Argumentsред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,Array, MapрдЙрдирдХреЗSetрдкрд╛рд╕ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ.keys, .valuesрдФрд░рд╡реЗ.entriesрдХреНрд░рдорд╢рдГ рдХреБрдВрдЬрд┐рдпреЛрдВ, рдореВрд▓реНрдпреЛрдВ, рдФрд░ рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред Core.js рдбреЗрдЯрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдПрдХ рд╕рд╛рде рд▓реВрдк рдХреЗ рд╕рд╛рде,for-ofрдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ):

 var string = 'abc'; for(var val of string)console.log(val); // => 'a', 'b', 'c' var array = ['a', 'b', 'c']; for(var val of array)console.log(val); // => 'a', 'b', 'c'.    - .values for(var val of array.values())console.log(val); // => 'a', 'b', 'c' for(var key of array.keys())console.log(key); // => 0, 1, 2 for(var [key, val] of array.entries()){ console.log(key); // => 0, 1, 2 console.log(val); // => 'a', 'b', 'c' } var map = new Map([['a', 1], ['b', 2], ['c', 3]]); for(var [key, val] of map){ //    - .entries console.log(key); // => 'a', 'b', 'c' console.log(val); // => 1, 2, 3 } for(var val of map.values())console.log(val); // => 1, 2, 3 for(var key of map.keys())console.log(key); // => 'a', 'b', 'c' for(var [key, val] of map.entries()){ console.log(key); // => 'a', 'b', 'c' console.log(val); // => 1, 2, 3 } var set = new Set([1, 2, 3, 2, 1]); for(var val of set)console.log(val); // => 1, 2, 3.    - .values for(var val of set.values())console.log(val); // => 1, 2, 3 for(var key of set.keys())console.log(key); // => 1, 2, 3.  .keys  .values for(var [key, val] of set.entries()){ //  Set   .entries     console.log(key); // => 1, 2, 3 console.log(val); // => 1, 2, 3 } var list = (function(){return arguments})(1, 2, 3); for(var val of list)console.log(val); // => 1, 2, 3 


# рдЪреВрдВрдХрд┐ рдЗрд╕ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЦрд░рд╛рдм рд╣реИ, рдЬреЛ рдИрдПрд╕ 6 + рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛for-of( рд╕реИрдВрдбрдмреЙрдХреНрд╕ )рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

 $for(new Set([1, 2, 3, 2, 1])).of(function(it){ console.log(it); // => 1, 2, 3 }); // 2  $for -  entries -    2  $for([1, 2, 3].entries(), true).of(function(key, value){ console.log(key); // => 0, 1, 2 console.log(value); // => 1, 2, 3 }); // 2  .of -    $for('abc').of(console.log, console); // => 'a', 'b', 'c' //    ,    false $for([1, 2, 3, 4, 5]).of(function(it){ console.log(it); // => 1, 2, 3 if(it == 3)return false; }); 

# рд╡рд╕реНрддреБargumentsрдХрд╛рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдкрд╣реИ -Object.prototypeрдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдврд╝рд╛рдП рдмрд┐рдирд╛, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд░реВрдк рдореЗрдВ core.js рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рднреАрд╣реИред рдЗрди рдХрд╛рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдЬрд╛рдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рд╡рд╕реНрддреБ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдПрдХ рд╡рд╕реНрддреБ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -$for.isIterable(foo)рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреЗрд░реВрдк рдореЗрдВSymbol.iterator in fooрдФрд░$for.getIterator(foo)рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд░реВрдк рдореЗрдВfoo[Symbol.iterator]():

 var list = (function(){return arguments})(1, 2, 3); console.log($for.isIterable(list)); // => true console.log($for.isIterable({})); // => false var iter = $for.getIterator(list); console.log(iter.next()); // => {value: 1, done: false} console.log(iter.next()); // => {value: 2, done: false} console.log(iter.next()); // => {value: 3, done: false} console.log(iter.next()); // => {value: undefined, done: true} 

# ECMAScript 6 рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ # рд╕рдВрдЧреНрд░рд╣ Map, Set, WeakMap, WeakSet , рд╕рд░рдгрд┐рдпреЛрдВ # рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗArray.from рдХрд░рдиреЗ рдХреЗPromise.all, Promise.raceрд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , # рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗрддрд░реАрдХреЛрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

# рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░, рдЬреЛ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдФрд░ рдПрдХ рд╕рд░рдгреА рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБ рдХреА рднреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ - рджрд╛рдВрддреЛрдВ рдореЗрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 [...new Set([1, 2, 3, 2, 1])]; // => [1, 2, 3] console.log(1, ...[2, 3, 4]); // => 1, 2, 3, 4 var map = new Map([[1, 'a'], [2, 'b']]); new Array(...map.keys(), 3); // => [1, 2, 3] 

# рдмрд╛рдХреА рд╕рдм рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА / рдЬрдирд░реЗрдЯрд░ рдХреА рд╕рдордЭ ( рдПрдХ рд╕рд░рдгреА / рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЕрдореВрд░реНрддрди? )рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╡реЗ ECMAScript 6 рдХреЗ рдорд╕реМрджреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдереЗ, рд▓реЗрдХрд┐рди ECMAScript 7 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реБрдИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡реЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБ рд╕реЗ рдПрдХ рд╕рд░рдгреА рдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╛рдиреА рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ filterрдФрд░ mapрдХрд┐рд╕реА рднреА iteriruemuh рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП ред рдЙрджрд╛рд╣рд░рдг, рдЕрдВрддрд┐рдо рд╕рд░рдгреА рд╡рд┐рдирд╛рд╢ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрдлрдПрдл рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред 6to5 рдФрд░ Traceur рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var ar1 = [for(i of [1, 2, 3])i * i]; // => [1, 4, 9] var set = new Set([1, 2, 3, 2, 1]); var ar2 = [for(i of set)if(i % 2)i * i]; // => [1, 9] var iter = (for(i of set)if(i % 2)i * i); iter.next(); // => {value: 1, done: false} iter.next(); // => {value: 9, done: false} iter.next(); // => {value: undefined, done: true} var map1 = new Map([['a', 1], ['b', 2], ['c', 3]]); var map2 = new Map((for([k, v] of map1)if(v % 2)[k + k, v * v])); // => Map {aa: 1, cc: 9} 

рдореЗрд░реЗ рд▓рд┐рдП - рдПрдХ рднрдпрд╛рдирдХ рдмрд╛рддред рд╡рд╣ рднреА рд╕рд┐рд░реНрдл рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред

# рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдИрдПрд╕ 6 рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдорд╛рди, рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╛рдЗрдХрд┐рд▓ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ$forред рдХреЙрд▓рдКрдкрд░ рд╡рд░реНрдгрд┐рдд$forрд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рджреЗрддрд╛ofрд╣реИ,filter, mapрдФрд░arrayред рд╡рд┐рдзрд┐рдпрд╛рдБfilterрдФрд░mapрдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ, рдЬреЛ, рддрджрдиреБрд╕рд╛рд░, рдкрд┐рдЫрд▓реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХреЗ рдорд╛рдиреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЗрдЯрд░реЗрдЯрд░ рдЙрд╕реА рддрд░реАрдХреЗ рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЗрдЯрд░реЗрдЯрд░$forред рд╡рд┐рдзрд┐arrayрд╡рд░реНрддрдорд╛рди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреА рд╣реИ, рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЙрд▓рдмреИрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИред рдЗрди рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рджреВрд╕рд░рд╛, рд╡реИрдХрд▓реНрдкрд┐рдХ, рддрд░реНрдХ - рдирд┐рд╖реНрдкрд╛рджрди рд╕рдВрджрд░реНрдн рд╣реИред рдпрджрд┐ рдпрд╣$forрдзреНрд╡рдЬ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИentries, рддреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╕рднреА рдХреЙрд▓рдмреИрдХ рдХреЛ рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

 var ar1 = $for([1, 2, 3]).array(function(v){ return v * v; }); // => [1, 4, 9] var set = new Set([1, 2, 3, 2, 1]); var ar1 = $for(set).filter(function(v){ return v % 2; }).array(function(v){ return v * v; }); // => [1, 9] var iter = $for(set).filter(function(v){ return v % 2; }).map(function(v){ return v * v; }); iter.next(); // => {value: 1, done: false} iter.next(); // => {value: 9, done: false} iter.next(); // => {value: undefined, done: true} var map1 = new Map([['a', 1], ['b', 2], ['c', 3]]); var map2 = new Map($for(map1, true).filter(function(k, v){ return v % 2; }).map(function(k, v){ return [k + k, v * v]; })); // => Map {aa: 1, cc: 9} 

рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд╕рд╛рде, ES5 рд╕реЗ рдХрд╛рд░реНрдп рдмреЛрдЭрд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдмрд╛рд╣рд░ рдЖрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдордЭ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ

рдкрд░ рдЕрдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ $for, рдЬреЛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдФрд░ рдЖрд▓рд╕реА (рдЬреИрд╕реЗ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЪрд▓рдиреЗ-рдлрд┐рд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЯрд╛рд▓ рджреЗрдВред рдпрд╛ рд╢рд╛рдпрдж рдирд░реНрдХ рдореЗрдВред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝реЗ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдВ ( # рдмрд╛рд░ , # рджреЛ ) рд╣реЛрддреА рд╣реИрдВ, #Dict рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБ рдХреА рдЙрдореНрдореАрдж рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдмрд╛рдЗрдХреЛрдВ рдХреЛ рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдирд╣реАрдВ рдЦреАрдВрдЪрд╛ред

# ECMAScript 6: рд╡рд╛рджреЗ



рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдИ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл ECMAScript 5 рдорд╛рдирдХ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ setTimeoutрдФрд░ setIntervalW3C рдФрд░ WHATWG, рдХреА рд╡реЗрдм рдорд╛рдирдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрдВ рдереЛрдбрд╝рд╛ рдФрд░ рдЖрдЧреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ # ред рдЬрдм рддрдХ рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдХреЙрд▓рдмреИрдХ рдирд░рдХ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИ ред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрд╕рд┐рдВрдирдЬреЗрдЬ рдЬреИрд╕реЗ рд╣реИрдВ ред

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдкреНрд░реЙрдорд┐рд╕ рдЯреЗрдореНрдкрд▓реЗрдЯред рдПрдХ рд╡рд╛рджрд╛ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬреЛ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрдк рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рди рддрд░реАрдХреЛрдВ рд╕реЗ рдЖрдк рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдирдП рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдЪреЗрди рдореЗрдВ рд╡рд╛рджреЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╛рджреЗ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ: рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдореЗрдВ try-catchрдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ рдХрднреА-рдХрднреА рдХреЛрдб рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд╛рджреЗ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЖрдк рдХрд┐рд╕реА рднреА рдЧрд▓рддреА рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ - рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ rejectрдФрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХ рджрд┐рдпрд╛ throwред

рдкреНрд░реЙрдорд┐рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреИрд╕реЗ рдХреНрдпреВ рдпрд╛ рдЖрд░рдПрд╕рд╡реАрдкреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ ред рд╕рдордп рдХреЗ рд╕рд╛рде, рдорд╛рдирдХ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛рд╡рд╛рджреЗ / рдП + , рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рднреА рд╡рд╛рджреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ .then(рдкрд╣рд▓рд╛ рддрд░реНрдХ рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рджреВрд╕рд░рд╛ - рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ)ред

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЕрдВрдд рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╛рджреЗ рдкрд░ рдЕрдорд▓ / рдП + рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рдФрд░ рдХрдо рд╕реЗ рдХрдо, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрдд рдПрдХ рд╡рд╛рджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди , рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ ECMAScript 6 рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ ред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдирдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛, рдЖрдк рдЙрдирдХреЗ рд╕рд╛рде рдпрд╣рд╛рдБ ( рдЕрдиреБрд╡рд╛рдж, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдкреБрд░рд╛рдирд╛ ), рдпрд╣рд╛рдБ рдпрд╛ рдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ред ES6 рд╡рд╛рджрд╛ v8 рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИ, рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓реНрд╕ рд╣реИрдВ - es6-рд╡рд╛рджрд╛ рдФрд░рдореВрд▓-рд╡рдЪрди-рдорд╛рддреНрд░ ред

# ECMAScript 6 рд╕реЗ рд╡рд╛рджреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рд╣реИPromiseрдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 2 рдХреЙрд▓рдмреИрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ - рдкрд╣рд▓рд╛ рд╡рд╛рджрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛then, ES6 рд╡рд╛рджреЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИcatch-thenрдкрд╣рд▓рд╛ рддрд░реНрдХ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗрд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var log = console.log.bind(console); function sleepRandom(time){ return new Promise(function(resolve, reject){ // resolve   , reject -   //      setTimeout(resolve, time * 1e3, 0 | Math.random() * 1e3); }); } log(''); // =>  sleepRandom(5).then(function(result){ log(result); // => 869,  5 . return sleepRandom(10); }).then(function(result){ log(result); // => 202,  10 . }).then(function(){ log('  '); // =>    throw Error('!'); }).then(function(){ log('   - '); }).catch(log); // => Error: '!' 

рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╡рд╛рджреЗ рдХреЗ рдЗрдВрдЬрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛, рдЗрд╕рд▓рд┐рдП рдХреЛрд░ ред рдЬреЗрдПрд╕ рдХрд░реНрдиреЗрд▓ рджреЗрд╢реА-рд╡рд╛рджрд╛-рдХреЗрд╡рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХрдо рдХреЛрдб рдмрдЪрд╛ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, process.nextTickрдкреЙрд▓рд┐рдлрд╝рд╛рдЗрд▓ # рд╕реЗрдЯрдЗрдордореАрдбреЗрдЯ рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

# рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛPromise.resolveрдФрд░Promise.rejectрд╡рд╛рдкрд╕реА, рдкреВрд░рд╛ рдХреНрд░рдорд╢: рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдпрд╛ рдореВрд▓реНрдп рдХрд╛ рд╡рд╛рджрд╛ рдЙрдиреНрд╣реЗрдВ рдЖрд╡рдВрдЯрд┐рдд рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдореЗрдВред рдпрджрд┐ рд╡рд╣Promise.resolveрдХреЛрдИ рд╡рд╛рджрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕реЗ рд▓реМрдЯрд╛ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рддрддреНрдХрд╛рд▓рд┐рдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, jQuery рдХреЗ рдЖрд╕реНрдердЧрд┐рдд) рд╡рд╛рджреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдорд╛рдирдХ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдереА -Promise.castред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 Promise.resolve(42).then(log); // => 42 Promise.reject(42).catch(log); // => 42 Promise.resolve($.getJSON('/data.json')); // => ES6 promise 

# рд╣реЗрд▓реНрдкрд░Promise.allрдПрдХ рд╡рд╛рджрд╛ рд╣реИ рдХрд┐ рд╣реИ, рдЬрдм рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреЗ рд╕рднреА рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рдорд╛рдзрд╛рди рджреЗрддрд╛ рд╣реИ # iterable рд╕рдВрдЧреНрд░рд╣ (- рдореИрдВ рдЦрд╛рд╕ рдорддрд▓рдм рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм v8 рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рд╕рд╣реА рдЕрднреА рддрдХ рдирд╣реАрдВ рдмрди рдЧрдпрд╛ рд╣реИ)ред рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡ рдЬреЛ рд╡рд╛рджреЗ рдирд╣реАрдВ рд╣реИрдВ, рд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВPromise.resolveред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 Promise.all([ 'foo', sleepRandom(5), sleepRandom(15), sleepRandom(10) //  15   -  ]).then(log); // => ['foo', 956, 85, 382] 

# рд╕рд╣рд╛рдпрдХPromise.raceрдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд╛рджрд╛ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддPromise.all, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдереЛрдбрд╝рд╛ рдХрдо, рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИред рдЬрдм рддрдХ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рд╡рд╛рджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рд╕реАрдорд╛ рддрдп рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 function timeLimit(promise, time){ return Promise.race([promise, new Promise(function(resolve, reject){ setTimeout(reject, time * 1e3, Error('Await > ' + time + ' sec')); })]); } timeLimit(sleepRandom(5), 10).then(log); // =>  5    853 timeLimit(sleepRandom(15), 10).catch(log); // Error: Await > 10 sec 

# рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рднреА, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрднреА рднреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ ECMAScript 7 рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗasync / awaitрд╣реИрдВ рдФрд░ # рдЬрдирд░реЗрдЯрд░ , рд╡рд╛рджреЗ рдФрд░ рдЬрдирд░реЗрдЯрд░рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛрд╡рд╛рджреЗ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ :) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Traceur рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдФрд░ 6to5 ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var delay = time => new Promise(resolve => setTimeout(resolve, time)); async function sleepRandom(time){ await delay(time * 1e3); return 0 | Math.random() * 1e3; } async function sleepError(time, msg){ await delay(time * 1e3); throw Error(msg); } (async () => { try { log(''); // =>  log(await sleepRandom(5)); // => 936,  5 . var [a, b, c] = await Promise.all([ sleepRandom(5), sleepRandom(15), sleepRandom(10) ]); log(a, b, c); // => 210 445 71,  15 . await sleepError(5, '!'); log('  '); } catch(e){ log(e); // => Error: '!',  5 . } })(); 

рд╕рдордп рдХреЗ рд╕рд╛рде, рд╡рд╛рджреЗ рдорд╛рдирдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рджреЗрдВрдЧреЗред рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирдХреАрдХреГрдд рд╣реИ ( рдкреЙрд▓реАрдлрд┐рд▓ ) fetch- рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реИрдкрд░ XMLHttpRequestрдЬреЛ рдПрдХ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХ рд╕рдорд╛рд░реЛрд╣ delayрдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреА, рдПрдХ рд╡рд╛рджрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреЗ рдмрд╛рдж рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ рджреЗрддрд╛ рд╣реИ - рдЕрд▓рд╡рд┐рджрд╛ setTimeoutред рд╢рд╛рдпрдж delayрдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

# рдореЛрдЬрд╝рд┐рд▓рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдРрд░реЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕реНрдЯреЗрдЯрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг



рд╣рдордиреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рд░реЗрдВрдЧрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИред рдЬреНрдпрд╛рджрд╛ рд╕рд░рд▓, рддреЗрдЬ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдЪреАрди рд╣реИред рдпреЗ рд╕рд░рдгреА рдЬреИрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред

рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдирдХреЗ рд╕рдорд╛рди рдХрдИ рд╕рдВрд╕реНрдерд╛рдПрдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд░рдгрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВред рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЬреИрд╕реЗ рд╕рд░рдгрд┐рдпреЛрдВ, рдореЗрдВ рд▓рдВрдмрд╛рдИ .lengthрдФрд░ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ [0 рд╕реЗ рдХреБрдВрдЬреА] .lengthрдЬрд┐рд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдлрд┐рд░ "рдЫреЗрдж" рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ Array.prototypeрдХреНрд░рдорд╢рдГ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ , рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ arguments, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ - IE8 +), рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгрд┐рдпрд╛рдБ (рд╕рд░рдгрд┐рдпрд╛рдБ, рд▓реЗрдХрд┐рди рдЦреБрдж рд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ Array.prototype), DOM рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣, jQuery рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЖрджрд┐ред

рд▓рдЧрднрдЧ рд╕рднреА рд╕рд░рдгреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐рдпрд╛рдВ рдЬреЗрдиреЗрд░рд┐рдХ рд╣реИрдВ ( рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЕрдиреБрд╡рд╛рдж рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ- "рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рд╛рдорд╛рдиреНрдп" рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ)ред рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╡рд╕реНрддреБ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣ рдПрдХ рд╕рд░рдгреА рд╣реИред рд╢рд╛рдпрдж .concatрд╕рдЪ рдореЗрдВ рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдРрд╕реЗ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ:

 Array.prototype.slice.call(arguments, 1); //  [].slice.call(arguments, 1); 

рдмреЛрдЭрд┐рд▓ рдФрд░ рддрд┐рд░рдЫреАред

ECMAScript 6 рдореЗрдВ #Array.from рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА рдЧрдИ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкреБрдирд░рд╛рд╡реГрддреНрдд рдФрд░ рд╕рд░рдгреА рдЬреИрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред

 Array.from(arguments).slice(1); 

рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╕реНрддреЗ рд╕реЗ рджреВрд░ - рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреВрд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рд╕рд░рдгреА, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рднрд╛рд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реИрдВред

рдореЛрдЬрд╝рд┐рд▓рд╛ рдХреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.6 рдореЗрдВ, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕, 2005 рдореЗрдВ рд╡рд╛рдкрд╕, рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдмрд╛рдж рдореЗрдВ ECMAScript 5 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдП ред рд╡реЗ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ 5 рд╡реЗрдВ рдпрд╛ 6 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реБрдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рд╕реНрдЯреНрд░реЛрдореИрди рд╡рд┐рдХрд╛рд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЙрдирдХреЗ рджрд┐рдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рддрддреНрд╡ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЪреВрдВрдХрд┐ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдЧреНрдирд┐ рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╣реИрдВ - рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмреИрд╕рд╛рдЦреА рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░реЗрдВрдЧреЗ, рди рдХрд┐ рд╕рд╛рдЗрдХрд┐рд▓ред

 Array.slice(arguments, 1); Array.join('abcdef', '+'); // => 'a+b+c+d+e+f' var form = document.getElementsByClassName('form__input'); Array.reduce(form, function(memo, it){ memo[it.name] = it.value; return memo; }, {}); // => , {name: '', age: '42', sex: 'yes, please'} 

# рд╡рд┐рд▓рдВрдмрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди: setTimeout, setInterval, setImmediate



# setTimeout, setInterval


рд╢рд╛рдпрдж рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ setTimeoutрдФрд░ setIntervalред рдХрдИ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдорд╛рдирдХ ( W3C , WHATWG ) рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпреЗ рдХрд╛рд░реНрдп, рдХреЙрд▓рдмреИрдХ рдФрд░ рд╡рд┐рд▓рдВрдм рд╕рдордп рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреЙрд▓рдмреИрдХ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕рдорд╕реНрдпрд╛ IE рдореЗрдВ рд╣реИред IE9- рдореЗрдВ setTimeoutрдФрд░ setIntervalрдХреЗрд╡рд▓ 2 рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ, рдпрд╣ рдХрдИ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 // : setTimeout(log.bind(null, 42), 1000); // : setTimeout(log, 1000, 42); 

# рд╕реЗрдЯрд┐рдорд┐рдЯреЗрдб


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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдЕрднреА рддрдХ) рдореЗрдВ рдкреВрдВрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реИред рдЬрдм рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА RangeError: Maximum call stack size exceededред рдпрд╣ рд╕рдВрдЦреНрдпрд╛, рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХрдИ рд╕реМ рд╕реЗ рд▓реЗрдХрд░ рдХрдИ рджрд╕рд┐рдпреЛрдВ рд╣рдЬрд╛рд░ рддрдХ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИред рд╕рдЪ рд╣реИ, рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдЖрдорддреМрд░ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рд▓реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмреЗрд╣рддрд░ рд╣реИред

рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВsetTimeoutрдПрдХ рдиреНрдпреВрдирддрдо рджреЗрд░реА рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдЧрд╛ред рдиреНрдпреВрдирддрдо setTimeoutрд╡рд┐рдирд┐рд░реНрджреЗрд╢ рджреЗрд░реА 4 рдПрдордПрд╕ рд╣реИ, рдФрд░ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдФрд░ рднреА рдЕрдзрд┐рдХред рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХреБрд▓, рдЕрдзрд┐рдХрддрдо, ~ 250 рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, IE8 рдореЗрдВ ~ 64ред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЪрдХреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рднрд╛рд╡реА рдЖрд╕реНрдердЧрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВред

рдЕрдЧрд░ рдореИрдВ Node.js рдкрд░ рдерд╛ process.nextTick, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рдерд╛ рдЬрд╣рд╛рдВ рд╕реЗ рд╡реЗ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред IE10 рдореЗрдВ, Microsoft рдиреЗ setImmediate рдореЗрдердб рдЬреЛрдбрд╝рд╛ , рдЬреЛ I / O рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ W3C рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд┐рдпрд╛ ред рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд░ Node.js рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ ред рдПрдлрдПрдл рдФрд░ рдХреНрд░реЛрдорд┐рдпрдо рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд▓реНрджреА рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред рд▓реЛрдХрдкреНрд░рд┐рдп рдЗрд╕ Polyphemusред

рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡реА рд╕реНрдердЧрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреЙрд▓реАрдлрд┐рд▓ рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди)ред рдпрд╣ рд╣реИ:


 setImmediate(function(arg1, arg2){ console.log(arg1, arg2); // =>        }, '   ', '  '); clearImmediate(setImmediate(function(){ console.log('   '); })); 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ setImmediate, рдЗрд╕рдХрд╛ рддреЗрдЬ рд╡рд┐рдХрд▓реНрдк рд╣реИ - рдЕрд╡рдзрд╛рд░рдгрд╛ asap(рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдп ) - рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕реА рд╡реИрд╢реНрд╡рд┐рдХ рдкрджреНрдзрддрд┐ рдХреЛ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдирдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ tc39 рдореЗрдВ рд╕реЛрдЪреЗрдВ ред рд╢рд╛рдпрдж рдЗрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

# рд╕рд╛рдВрддреНрд╡рдирд╛



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

# IE7 рдореЗрдВ, рдХрдВрд╕реЛрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реИред рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП, "рд╣рд╛рдЗрдЬреЗрдирдмрд░реНрдЧ рдХрдВрд╕реЛрд▓" рдХреЛconsoleрдХреЗрд╡рд▓ рддрднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдлрд╛рдпрд░рдмрдЧ рд▓рд╛рдЗрдЯ рдХреА рд╢реИрд▓реА рдореЗрдВ рдЕрдкрдиреЗ рдХрдВрд╕реЛрд▓ рдХрд╛рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдмрд╕ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдЖрдк рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред

 // : if(window.console && console.log)console.log(42); // : console.log(42); 

# рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рдХреНрд░реЛрдорд┐рдпрдо рдореЗрдВ, рдХрдВрд╕реЛрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПconsole, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдВрдзрдирд╛ рд╣реЛрдЧрд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, #console.log.bind(console) ред IE рдореЗрдВ, Firebug, рдФрд░ Node.js, рдЖрдк рдмрд┐рдирд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрд╛рдВрдзреЗрдВрдЧреЗconsoleред

 // : setTimeout(console.log.bind(console, 42), 1000); [1, 2, 3].forEach(console.log, console); // : setTimeout(console.log, 1000, 42); [1, 2, 3].forEach(console.log); 

рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░, рдХрдВрд╕реЛрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЬрд┐рд╕ рд▓рд╛рдЗрди рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЬрдм рд╕рд╛рдВрддреНрд╡рдирд╛ рдЕрдзрд┐рднрд╛рд╡реА, рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рд╣реЛ рдЬрд╛рдПрдЧрд╛ sore.js ред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдХрдВрд╕реЛрд▓ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдХрдВрд╕реЛрд▓ рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЧреИрдЧ рдЬреЛрдбрд╝реЗрдВ:


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

 console.disable(); console.warn(' ,     .'); console.enable(); console.warn('  .'); 

рдкреНрд░рд╕рдВрдЧ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдФрд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рдореМрдЬреВрдж рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ TheShock рд╕реЗ ред

# рднрд╛рдЧ рджреЛ: рд╕рд╛рдЗрдХрд┐рд▓реЗрдВ


рд╢реВрдиреНрдп рд╡рд┐рдХрд▓реНрдк, рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВред
рдореИрдВ рдЖрдзреА рджреБрдирд┐рдпрд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ - рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрддред
- рдирд╢реЗ рдХреА рд▓рдд

рдЗрд╕ рд▓реЗрдЦ / рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рд╛рдЗрдХрд┐рд▓реЗрдВ, рд╕рднреА рдЧреИрд░-рдорд╛рдирдХреАрдХреГрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИрдВред рджрд░рдЕрд╕рд▓, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдорд╛рдирдХ рднрд╛рд╖рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреНрдпрд╛ рдХрдореА рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рд╣реЛред рдЗрд╕рдореЗрдВ рдпрд╣ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ ES7 + рдореЗрдВ рдХреНрдпрд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рд░-рдмрд╛рд░ рд╕рдореАрдХреНрд╖рд╛ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

# рдбреЗрдЯрд╛ рд╡рд░реНрдЧреАрдХрд░рдг



# рдпрд╣рд╛рдВ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреЛрдЯрдмрдВрджреА рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред ECMAScript 5 рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ 6 рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ :Undefined, Null, Boolean, String, NumberрдФрд░Objectред ECMAScript 6 рдПрдХ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ - #Symbol рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкрд░реЗрдЯрд░ рд╣реИtypeofред рдмрд╕ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рд╣реБрдЖ рдХрд┐ рдпрд╣typeof nullрд╡рд╛рдкрд╕ рд▓реМрдЯ рдЖрдпрд╛'object'рдФрд░рд╣рд╛рд░реНрдордиреА рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЕрд╕рдлрд▓ рд░рд╣рд╛ред рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдПObject typeofрдпрд╛ рддреЛ рд░рд┐рдЯрд░реНрди'object'рдпрд╛'function', рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░[[Call]]ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд░typeofрдХреЗрд╡рд▓ рдкреНрд░рд╛рдЗрдорд░реА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрди рд╕рднреА рдХреЛ рдирд╣реАрдВред

рдпрджрд┐ рдЖрдк рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЪрд░ рдХреНрдпрд╛ рд╣реИnullрдмрд╕, рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рддреЛ рдЖрдкрдХреЛ Objectрдпрд╛ рддреЛ рд╣рд░ рдмрд╛рд░ рд╕реИрдХрдбрд╝реЛрдВ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдПрдХ рд╕рд╣рд╛рдпрдХред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - Object(foo) === fooрд▓реЗрдХрд┐рди рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╕рдмрд╕реЗ рддреЗрдЬреА рд╕реЗ рджреВрд░ рд╣реИ - рдпрд╣ рдЖрджрд┐рдо рдХреЛ рд╡рд╕реНрддреБ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдИрдПрд╕ 6 рдХреЗ рд╢реБрд░реБрдЖрддреА рдбреНрд░рд╛рдлреНрдЯ рдореЗрдВ, рдПрдХ рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рдереА Object.isObject, рд▓реЗрдХрд┐рди, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдХреЗ рдХрд╛рд░рдг typeof null, рдЗрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдЪрд░ рдПрдХ рд╡рд╕реНрддреБ рд╣реИ, рдЖрдкрдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреЛ рдЖрдЗрдП рдПрдХ рд╕рд╣рд╛рдпрдХ рдЬреЛрдбрд╝реЗрдВObject.isObject , рдЬреЛ рдХрд╣реАрдВ рднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ):

 Object.isObject = function(it){ return it != null && (typeof it == 'object' || typeof it == 'function'); } // ... typeof {}; // => 'object' typeof isNaN; // => 'function' typeof null; // => 'object' Object.isObject({}); // => true Object.isObject(isNaN); // => true Object.isObject(null); // => false 

# рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдкред рдСрдкрд░реЗрдЯрд░instanceofрдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВFunction.prototype, рддреЛ рдпрд╣ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рд╕рдВрдкрддреНрддрд┐constructorрдХреБрдЫ рднреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рдиconstructor.nameрди рдХреЗрд╡рд▓ рдпрд╣ рдХреЛрдб рд╕рдВрдкреАрдбрд╝рди рдореЗрдВ рд╕рднреА рдЕрд░реНрде рдЦреЛ рджреЗрддрд╛ рд╣реИ, IE рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ[[Class]]ред рдЗрд╕реЗ рдлрд╛рдбрд╝рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдбрд░рд╛рд╡рдирд╛ рдбрд┐рдЬрд╛рдЗрди рд╣реИ рдЬреЛ рдХрдИ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИObject.prototype.toString.call(foo).slice(8, -1)ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 Object.prototype.toString.call(1).slice(8, -1); // => 'Number' Object.prototype.toString.call([]).slice(8, -1); // => 'Array' Object.prototype.toString.call(/./).slice(8, -1); // => 'RegExp' 

рдЖрдВрддрд░рд┐рдХ рд╕реНрд╡рд╛рдЧрдд рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдмрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд╣рддреЗ рд╣реИрдВ #Array.isArray : Object.is рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЪреАрдиреА рдХреЗ рд▓рд┐рдП , _.is рдкреНрд░рдХрд╛рд░ рдореЗрдВ Undescore рдЖрджрд┐

рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ - рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ Object.classofрд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╡рд┐рдзрд┐ , рд▓рд╛рдЗрд╡рд╕реНрдХреНрд░рд┐рдкреНрдЯ ( рдЙрджрд╛рд╣рд░рдг ) typeof!рд╕реЗ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдорд╛рди ред рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:

Object.prototype.toString.call(foo).slice(8, -1)

рдЕрдЪрд╛рдирдХ, ECMAScript 6 рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдРрд╕реА рдЖрдВрддрд░рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЕрднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ [[Class]]ред Object#toStringES6, рд╡рд┐рд╢реЗрд╖ рдЖрдВрддрд░рд┐рдХ рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ Undefined, Null, Array, String, Arguments, Function, Error, Boolean, Number, Dateрдпрд╛ рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ RegExp, рдФрд░ рдмрд╛рдХреА рдХреЗ рд▓рд┐рдП рдпрд╣ # рд╡рд░реНрдг рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХреЗрдд рдХреА рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ Symbol.toStringTagред рдпрджрд┐ рд╡рд┐рдзрд┐ рдПрдХ рд╕рдВрдХреЗрдд рдвреВрдВрдврддреА рд╣реИ рдФрд░ рдпрд╣ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд "рд╡рд░реНрдЧреЛрдВ" рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реИ - рдЗрд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдирд╣реАрдВ рдвреВрдВрдврддрд╛ рд╣реИ - Objectред

рд╣рдо рдХрд╛рдо рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рд╣реА рдХрд░реЗрдВрдЧреЗ Object#toString, рдзрдиреНрдпрд╡рд╛рдж # рдПрдХ рдмреБрд░рд╛, рд▓реЗрдХрд┐рди рдордЬрд╝реЗрджрд╛рд░, рдмрдЧ, рд╣рдо рдЗрд╕реЗ IE8 рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ- рдЗрд╕реЗ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ for-inред рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ Object.classofред рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдореЗрдВ рдХрд╕реНрдЯрдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд┐рд▓рддреА рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var classof = Object.classof; classof(null); // => 'Null' classof(undefined); // => 'Undefined' classof(1); // => 'Number' classof(true); // => 'Boolean' classof('string'); // => 'String' classof(Symbol()); // => 'Symbol' classof(new Number(1)); // => 'Number' classof(new Boolean(true)); // => 'Boolean' classof(new String('string')); // => 'String' var fn = function(){} , list = (function(){return arguments})(1, 2, 3); classof({}); // => 'Object' classof(fn); // => 'Function' classof([]); // => 'Array' classof(list); // => 'Arguments' classof(/./); // => 'RegExp' classof(new TypeError); // => 'Error' classof(new Set); // => 'Set' classof(new Map); // => 'Map' classof(new WeakSet); // => 'WeakSet' classof(new WeakMap); // => 'WeakMap' classof(new Promise(fn)); // => 'Promise' classof([].values()); // => 'Array Iterator' classof(new Set().values()); // => 'Set Iterator' classof(new Map().values()); // => 'Map Iterator' classof(Math); // => 'Math' classof(JSON); // => 'JSON' function Example(){} Example.prototype[Symbol.toStringTag] = 'Example'; classof(new Example); // => 'Example' 

# рд╢рдмреНрджрдХреЛрд╢



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

рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдПрдХ рддрддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рдмреАрдЪ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рдЬреЛ, рдЕрдЧрд░ рд╡рд╕реНрддреБ рдХреЗ рддрд╣рдд рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ (рдФрд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ рдХреЗ рд╕рд╛рде рдЕрдВрдХрди рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд╕реНрддреБ, рдпрд╣ Object.prototype) рд╢рдмреНрджрдХреЛрд╢ рдкрд░ рдореВрд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП, рдпреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВ Object.prototypeред

ECMAScript 6 рдореЗрдВ, рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд, # рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдХрдЯ рд╣реБрдП рд╣реИрдВ Mapред рдЗрд╕рдХреА рдЧрддрд┐ рдХрднреА-рдХрднреА рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рднреА рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИ (рд╕реНрд╡рдпрдВ рд╕реЗ, рдпрд╣ рдкреЙрд▓реАрдлрд┐рд▓ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ)ред рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╕рд┐рд░реНрдл рдЖрдИрдПрдордПрдЪрдУ рд╣реИ рдЬреЛ рд╡реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдореЗрдВMap, рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЛрдИ рд╕рд░рд▓ рд╢рд╛рдмреНрджрд┐рдХ рд╕рдВрдХреЗрддрди рдирд╣реАрдВ рд╣реИ, рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреА рд╣реИ - рдЗрддрдирд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╣реАрдВред Mapрд╕рднреА рд╕реЗ рдкреНрд░рд┐рдп рджреВрд░ рд╣реИ JSONрдФрд░ рдЗрддрдирд╛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╢рдмреНрджрдХреЛрд╢ рдХреБрдВрдЬрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред


# рд╕рдорд╕реНрдпрд╛: Object.prototype рдФрд░ рд╢рдмреНрджрдХреЛрд╢реЛрдВ


рдореЗрдВ Object.prototypeрдХреИрд╕реЗ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ рдореЛрдЬрд╝рд┐рд▓рд╛ рдбреЗрд╡рд▓рдкрд░, рдиреЗрдЯрд╡рд░реНрдХ , рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

 Object.prototype.constructor(); Object.prototype.hasOwnProperty(); Object.prototype.isPrototypeOf(); Object.prototype.propertyIsEnumerable(); Object.prototype.toLocaleString(); Object.prototype.toString(); Object.prototype.valueOf(); Object.prototype.__proto__; Object.prototype.__count__; Object.prototype.__parent__; Object.prototype.__noSuchMethod__; Object.prototype.__defineGetter__(); Object.prototype.__defineSetter__(); Object.prototype.__lookupGetter__(); Object.prototype.__lookupSetter__(); Object.prototype.eval(); Object.prototype.toSource(); Object.prototype.unwatch(); Object.prototype.watch(); 

рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдХреИрд╕реЗ рдЦрддрд░рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрджрд┐рдо рдЯреЗрд▓реАрдлреЛрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪ рд╣реИ:

 var phone = (function(){ var db = { '': '+7987654', '': '+7654321' }; return { has: function(name){ return name in db; }, get: function(name){ return db[name]; }, set: function(name, phone){ db[name] = phone; }, delete: function(name){ delete db[name]; } }; })(); 

рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ :

 console.log(phone.has('')); // => true console.log(phone.get('')); // => '+7987654' console.log(phone.has('')); // => false console.log(phone.get('')); // => undefined console.log(phone.has('toString')); // => true console.log(phone.get('toString')); // => function toString() { [native code] } 

рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, inрдЗрд╕реА рддрд░рд╣ рдЗрд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП inрдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВ / рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдЬреЛ hasOwnPropertyрдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗред рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ :

 // ... has: function(name){ return db.hasOwnProperty(name); }, get: function(name){ if(db.hasOwnProperty(name))return db[name]; }, // ... console.log(phone.get('')); // => '+7987654' phone.set('hasOwnProperty', '+7666666'); //   "" console.log(phone.get('')); // TypeError: string is not a function 

рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдЧрдВрднреАрд░ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ "рдЯреЗрд▓реАрдлреЛрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл рд╣реИред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ hasOwnPropertyрд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЕрдЫреВрддрд╛ рд╣реИред рд╣рдореЗрдВ рд╕рднреА рдХреЗ рд▓рд┐рдП рдмреЛрдЭрд┐рд▓ рдЬрд╛рдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓рдЧрднрдЧ рдЗрддрдирд╛ рд╣реА рдХрдЪрд░рд╛ :

 // ... has: function(name){ return Object.prototype.hasOwnProperty.call(db, name); }, get: function(name){ if(Object.prototype.hasOwnProperty.call(db, name))return db[name]; }, // ... 

рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рддреНрдпрд╛рдкрди рдСрдкрд░реЗрдЯрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рдЕрдкрдиреА рд╣реИ, рдЙрд╕реА рдХреЗ рд╕рдорд╛рди рд╣реИ inред

рдХреНрдпрд╛ рдЖрдкрдиреЗ рддрдп рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЦрддреНрдо рд╣реЛ рдЧрдИ рд╣реИрдВ? рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ :

 phone.set('__proto__', '+7666666'); //   "" console.log(phone.get('__proto__')); // => undefined 

рдЗрд╕рдореЗрдВ Object.prototype"рдореИрдЬрд┐рдХ" рдЧреЗрдЯреНрдЯрд░ / рд╕реЗрдЯрд░ рднреА рд╣реИ __proto__, рдЗрд╕ рдХреБрдВрдЬреА рдкрд░ рдЖрджрд┐рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЧреБрдгреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд░рд╛рдиреЗ рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ рдЕрдиреНрдп "рдЬрд╛рджреВ" рдЧреБрдг рдереЗред рдХреЗрд╡рд▓ Object.defineProperty( рд╕реИрдВрдбрдмреЙрдХреНрд╕рд░ ) рдпрд╣рд╛рдВ рдорджрдж рдХрд░реЗрдЧрд╛ :

 // ... set: function(name, phone){ Object.defineProperty(db, name, { enumerable : true, configurable: true, writable : true, value : phone }); }, // ... 

рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢рдмреНрджрдХреЛрд╢ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдпрджрд┐ рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдЧреБрдг рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд░рддреЗ рд╣реБрдП, for-inрдЖрдк рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ hasOwnPropertyред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдмрдЧ рдХреЗ рд╕рд╛рде рд╣реИ "" рдиреЙрди-рдПрдиреНрдпреБрдорд░реЗрдмрд▓ рдПрдиреНрдпреБрдореЗрд░реЗрдмрд▓ "рдЧреБрдг рдЕрднреА рднреА рдЗрд╕реЗ рдЙрди for-inрд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдпрд╣ рд╕реНрдерд┐рдд рд╣реИ Object.prototype, рдкреБрд░рд╛рдиреЗ IE рдореЗрдВ рдЕрд╡рд░ред

ECMAScript 5 рдореЗрдВ, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ - Object.create(null)рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ) рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ :

 var phone = (function(){ var db = Object.create(null); Object.assign(db, { '': '+7987654', '': '+7654321' }); return { has: function(name){ return name in db; }, get: function(name){ return db[name]; }, set: function(name, phone){ db[name] = phone; }, delete: function(name){ delete db[name]; } }; })(); 

рд╕рдм рдХреБрдЫ рдЕрджреНрднреБрдд рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕рдХреА рд░рдЪрдирд╛ рдФрд░ рдЖрд░рдВрднреАрдХрд░рдг, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ Object.assignрдмрд╣реБрдд рдХреЙрдореНрдкреИрдХреНрдЯ рдирд╣реАрдВ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдРрд╕реЗ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ toStringрдФрд░ valueOfред рдпрд╣ рд╣рдореЗрдВ рдХреИрд╕реЗ рдзрдордХреА рджреЗрддрд╛ рд╣реИ?
рдЬреИрд╕реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╛рдЗрдирд╕ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдПрдХ рдкреНрд▓рд╕ рд╣реИред

# рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░Dict


рддреЛ, рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Object.create(null)рдФрд░ рдЗрд╕реЗ рднрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рд╣реИ {}ред рдмреЗрд╢рдХ, рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд╢рд╛рдмреНрджрд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ , рд▓реЗрдХрд┐рди рдпрд╣, рдХрдо рд╕реЗ рдХрдо рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ, рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИ {__proto__: null, foo: 'bar'}, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рд╕рдордп рдпрд╣ рдХреЛрдб рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдпрд╣ рдЕрднреА рднреА рдмреЛрдЭрд┐рд▓ рд╣реИред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рд░реНрдгрдп

рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ - рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ "рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПDictObject.create(null)ред рдпрд╣ рдЕрдм рдХреИрд╕реЗ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдЗрд╕реЗ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛? рдЙрд╕реА рд╕рдордп, рд╣рдореЗрдВ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рд╕реНрдерд╛рди рдорд┐рд▓рддрд╛ рд╣реИред рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ entriesрдпрд╛ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ , рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд▓рд┐рдП #Array.from рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ ред

рдЪреВрдВрдХрд┐ рдпрд╣ Dict() instanceof DictрдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ #Object.classof(Dict()) рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ 'Object', рд╣рдо рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВрдЧреЗ Dict.isDictред

рдХреБрдЫ рдЗрд╕ рддрд░рд╣ :

 function Dict(props){ var dict = Object.create(null); if(props != null){ if(Symbol.iterator in props){ for(var [key, val] of props)dict[key] = val; } else Object.assign(dict, props); } return dict; } Dict.prototype = null; Dict.isDict = function(it){ return Object.isObject(it) && Object.getPrototypeOf(it) === null; } // ... var map = new Map([['a', 1], ['b', 2], ['c', 3]]); Dict(); // => {__proto__: null} Dict({a: 1, b: 2, c: 3}); // => {__proto__: null, a: 1, b: 2, c: 3} Dict(map); // => {__proto__: null, a: 1, b: 2, c: 3} Dict([1, 2, 3].entries()); // => {__proto__: null, 0: 1, 1: 2, 2: 3} Dict((for([k, v] of map)if(v % 2)[k + k, v * v])); // => {__proto__: null, aa: 1, cc: 9} Dict.isDict({}); // => false Dict.isDict(Dict()); // => true 

# рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рдо рдХреЗ рддрд░реАрдХреЗ


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

Dict.has- рдореИрд▓рд╛, рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг hasOwnPropertyред рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 6 рдбреНрд░рд╛рдлреНрдЯ рдореЗрдВ, рдореЙрдбреНрдпреВрд▓ рдореЗрдВ Reflect- Proxyрд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрдм рддрдХ рд╕реНрдЯрдмреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ , рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдг рдерд╛ hasOwnProperty- рд╡рд┐рдзрд┐ Reflect.hasOwnред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╕реМрджрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

Dict.get- рдПрдХ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕рдВрдкрддреНрддрд┐ рд╕реНрд╡рдпрдВ рд╣реИред рдирд╣реАрдВ - рд╡рд╛рдкрд╕реА undefinedред

Dict.set- рдмрд┐рд▓реНрдХреБрд▓ рдкрд╛рдЧрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ред рдЖрдкрдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдХреА рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдмрд╕рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ __proto__ред рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ definePropertyред

рдареАрдХ рд╣реИ, рдСрдкрд░реЗрдЯрд░ deleteрдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЪрд╛рд╣рд┐рдПред

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

 var dict = {a: 1, b: 2, c: 3}; console.log(Dict.has(dict, 'a')); // => true console.log(Dict.has(dict, 'toString')); // => false console.log(Dict.get(dict, 'a')); // => 1 console.log(Dict.get(dict, 'toString')); // => undefined Dict.set(dict, '__proto__', 42); console.log(Dict.get(dict, '__proto__')); // => 42 

# рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ


ECMAScript 5 рджреНрд╡рд╛рд░рд╛ рд╕рд░рдгреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдмрд╛рдИрдкрд╛рд╕ ( forEach, map, someрдЖрджрд┐) рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝реЗ рдЧрдП рддрд░реАрдХреЗ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВред рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕реНрдерд┐рд░ рд╕рдордХрдХреНрд╖ рд▓рдЧрднрдЧ рд╕рднреА рд╕рд╛рдорд╛рдиреНрдп-рдкреНрд░рдпреЛрдЬрди рд░реВрдкрд░реЗрдЦрд╛ / рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реИред

рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ Dictред рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рд╡рд┐рдзрд┐ рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕реНрдерд┐рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдпрд╣ рд╣реИ: Dict.forEach, Dict.map, Dict.filter, Dict.some, Dict.every, Dict.find, Dict.findKey, Dict.keyOf, # Dict.includes , Dict.reduce, #Dict.turn ред Keyрдирд╛рдо indexрдореЗрдВ рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рдХреЛрдИ "рд╕рд╣реА" рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХ рддрд░реНрдХ (рдЕрднреА рддрдХ?) рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рдХреНрд░рдо рд╣рдореЗрд╢рд╛ рд╣рд░ рдЬрдЧрд╣ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреЗрд╡рд▓ рдПрдиреНрдпреВрдорд░реЗрдЯреЗрдб рддрддреНрд╡реЛрдВ рдХреЛ рд╣реА рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЗрдиреЗрд░рд┐рдХ рддрд░реАрдХреЗ рд╕реЗ Array.fromрдпрд╛ рдЬреИрд╕реЗ рд╣реИрдВ Array.ofред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Dict.map(dict, fn)рдПрдХ рдирдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛Dict, рдФрд░ Dict.map.call(Object, dict, fn)- рдирдпрд╛ Objectред рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдЖрджрд┐рдо, рдЙрдмрд╛рдК рдФрд░ рд╣рд░ рдЬрдЧрд╣ рдХреА рддрд░рд╣ рд╣реИ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ):

 var dict = {a: 1, b: 2, c: 3}; Dict.forEach(dict, console.log, console); // => 1, 'a', {a: 1, b: 2, c: 3} // => 2, 'b', {a: 1, b: 2, c: 3} // => 3, 'c', {a: 1, b: 2, c: 3} Dict.map(dict, function(it){ return it * it; }); // => {a: 1, b: 4, c: 9} Dict.filter(dict, function(it){ return it % 2; }); // => {a: 1, c: 3} Dict.some(dict, function(it){ return it === 2; }); // => true Dict.every(dict, function(it){ return it === 2; }); // => false Dict.find(dict, function(it){ return it > 2; }); // => 3 Dict.find(dict, function(it){ return it > 4; }); // => undefined Dict.findKey(dict, function(it){ return it > 2; }); // => 'c' Dict.findKey(dict, function(it){ return it > 4; }); // => undefined Dict.keyOf(dict, 2); // => 'b' Dict.keyOf(dict, 4); // => undefined Dict.includes(dict, 2); // => true Dict.includes(dict, 4); // => false Dict.reduce(dict, function(memo, it){ return memo + it; }); // => 6 Dict.reduce(dict, function(memo, it){ return memo + it; }, ''); // => '123' Dict.turn(dict, function(memo, it, key){ memo[key + key] = it; }); // => {aa: 1, bb: 2, cc: 3} Dict.turn(dict, function(memo, it, key){ it % 2 && memo.push(key + it); }, []); // => ['a1', 'c3'] 

# рддрд░реАрдХреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП, # рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП ,Dictрд╡реЗрдореЙрдбреНрдпреВрд▓ рдХреЗ рднреАрддрд░рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдпрд╣рд╛рдБ рдЙрджреНрдзрд╛рд░ рдЕрдореВрд░реНрдд рд╕рдВрджрд░реНрдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди #$for рдФрд░ #Map рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░рдпрд╣ рдмрд╣реБрдд рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╡реЗ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред

# рд╢рдмреНрджрдХреЛрд╢ рдЪрд▓рдирд╛


ES6 рдХрд╛ рдЙрдЬреНрдЬреНрд╡рд▓ рднрд╡рд┐рд╖реНрдп # рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдПрдХ # рдкрд╛рд╢ рдХреЗ рд╕рд╛рде рдЖ рд░рд╣рд╛ рд╣реИfor-of ред рдпрд╣ рдХреЗрд╡рд▓ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рдпрд╣ рди рддреЛ рдЧрд░реНрдо рд╣реИ рдФрд░ рди рд╣реА рдардВрдбрд╛ рд╣реИ - рдЙрдирдХреЗ рд▓рд┐рдП ES6 рдореЗрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ for-of, рдПрдХ #Map рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ , рдЖрджрд┐ред рд╡рд┐рдзрд┐рдпрд╛рдВ рдЬреЛрдбрд╝рдиреЗ .keys, .valuesрдФрд░ .entriesрдореЗрдВ Object.prototypeрд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ - рд╡рд╣рд╛рдБ рдкрд░реНрдпрд╛рдкреНрдд рдХреВрдбрд╝реЗ рд╣реИрдВ рдкрд┐рдЫрд▓реЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦрдиреЗ рдХреЗ .. рд▓реЗрдХрд┐рди рджреЛ рдЕрдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВ:

рдкрд╣рд▓рд╛ - рд╕реНрдереИрддрд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рдиреЗрдорд╕реНрдкреЗрд╕ рдХреЛ рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ Dict- Dict.{keys, values, entries}ред рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рд▓рд┐рдЦрд╛ рдерд╛, рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдорд╛рдирдХ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред

рджреВрд╕рд░рд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реАрдХреЛрдВObject.{values, entries} рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИObject.keys, рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрдирд╛, рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд░рдгреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╕реНрддреБ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

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

 var dict = {a: 1, b: 2, c: 3}; console.log(Object.values(dict)); // => [1, 2, 3] console.log(Object.entries(dict)); // => [['a', 1], ['b', 2], ['c', 3]] for(var key of Dict.keys(dict))console.log(key); // => 'a', 'b', 'c' for(var [key, val] of Dict.entries(dict)){ console.log(key); // => 'a', 'b', 'c' console.log(val); // => 1, 2, 3 } $for(Dict.values(dict)).of(console.log); // => 1, 2, 3 new Map(Dict.entries(dict)); // => Map {a: 1, b: 2, c: 3} new Map((for([k, v] of Dict.entries(dict))if(v % 2)[k + k, v * v])); // => Map {aa: 1, cc: 9} 

# рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ


рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде # рдХреЗDict рд▓рд┐рдП рди рдХреЗрд╡рд▓ рд╕рдВрдХреНрд╖рд┐рдкреНрддреАрдХрд░рдг рдХрд░рдирд╛ , рди рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд Object.create(null)рд░реВрдк рдореЗрдВ рдПрдХ рдЗрдЯреНрд░реЗрдЯрд░ рдФрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг-рдирд┐рд░реНрдорд┐рдд рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ ред рдХреБрдЫ рдЗрд╕ рддрд░рд╣ :

 function Dict(props){ if(!(this instanceof Dict))return new Dict(props); if(props != null){ if(Symbol.iterator in props){ for(var [key, val] of props)this[key] = val; } else Object.assign(this, props); } } Dict.prototype = Object.create(null); Dict.prototype[Symbol.toStringTag] = 'Dict'; Dict.prototype[Symbol.iterator] = function(){ return Dict.entries(this); }; 

рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЧрд╛?


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд╛рд░рдг рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо, IE8- рдЕрдВрдд рддрдХ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ ECMAScript 6 рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛ рд╢рд╛рдпрдж рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ - рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде / рдпрджрд┐ рдорд╛рдирдХ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрдЧрддрддрд╛ рдЦреЛрдиреЗ рдХрд╛ рдЬреЛрдЦрд┐рдо рд░рдЦрддреЗ рд╣реИрдВред Dictрд╡рд╣рд╛рдБ рдкрд╣реБрдБрдЪ рдЬрд╛рддрд╛ рд╣реИред

# рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди



рд╢рд╛рдпрдж ECMAScript 5 рдореЗрдВ рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ #Function#bind рд╡рд┐рдзрд┐ рдереА ред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:


рдПрдХ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ currying , рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ currying рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдмрд╣реБрдд рдмрд╛рд░ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рддрд░реАрдХреЛрдВ рдХреЗ "рд╕рд╣реА" рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреА рддрд░рд╣ред рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд (рдФрд░, рд╢рд╛рдпрдж, рдкреНрд░рд╕рд┐рджреНрдз) рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ ред

# рд╕рдВрджрд░реНрдн рдмрдВрдзрди рдХреЗ рдмрд┐рдирд╛ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди


Function#bindрдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдФрд░ рд╕рдВрджрд░реНрдн рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ thisред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, thisрди рдХреЗрд╡рд▓ "рдЕрддрд┐рд░рд┐рдХреНрдд" рддрд░реНрдХ рдЬрд┐рд╕реЗ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдмрд╛рдзреНрдп рд╣реИ ред рдпрджрд┐ рд╕рдВрджрд░реНрдн рдЬрд┐рд╕рдореЗрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рддреЛ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рд╡рд┐рдзрд┐ Function#bindрд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ) рд╣реИ:

 Array.prototype.compact = [].filter.bind(Array.prototype, function(val){ return val != null; }); [0, null, 1, undefined, 2].compact(); // => [] -     Array.prototype,     //    : Array.prototype.compact = function(){ return this.filter(function(val){ return val != null; }); }; [0, null, 1, undefined, 2].compact(); // => [0, 1, 2]; 

рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ this- Function#part( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ):

 Array.prototype.compact = [].filter.part(function(val){ return val != null; }); [0, null, 1, undefined, 2].compact(); // => [0, 1, 2]; var fn = console.log.part(1, 2); fn(3, 4); // => 1, 2, 3, 4 

# рдордирдорд╛рдиреА рддрд░реНрдХреЛрдВ рдХрд╛ рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ


рдЕрдХреНрд╕рд░ рдЬрдм рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдордирдорд╛рдиреА рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдкрд╣рд▓реЗ 2, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдФрд░ рдЪреМрдереЗ рдпрд╛ рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗред рдпрд╣рд╛рдБ Function#bindрд╡рд╣ рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧреА - рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдПрдХ рдЖрд╡рд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред

 function fn1(a, c){ console.log(a, 2, c, 4); }; fn1(1, 3); // => 1, 2, 3, 4 function fn2(b, c){ console.log(1, b, c, 4); }; fn2(2, 3); // => 1, 2, 3, 4 

рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЙрд╕ рддрд░реНрдХ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рд╣реИ _(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрд╡рд╕реНрдХреНрд░рд┐рдкреНрдЯ , рдПрдХ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ ), рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ред рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (рд╡реИрд╕реЗ, рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рднреА рд╣реИ _.partial) рдФрд░ LoDash рдХреЛ рдЗрд╕рдХреЗ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо _рдХреЗрд╡рд▓ рдПрдХ рдирдИ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ _, рдЪрд╛рд╣реЗ рд╡рд╣ рдХреБрдЫ рднреА рд╣реЛред рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ core._ред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 var fn1 = console.log.part(_, 2, _, 4); fn1(1, 3); // => 1, 2, 3, 4 var fn2 = console.log.part(1, _, _, 4); fn2(2, 3); // => 1, 2, 3, 4 fn1(1, 3, 5); // => 1, 2, 3, 4, 5 fn1(1); // => 1, 2, undefined, 4 

рд╣рдо рдПрдХ Function#byрд╕рдорд╛рди рд╡рд┐рдзрд┐ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ Function#bind, рд▓реЗрдХрд┐рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рдеред рдЖрдк рдЗрд╕реЗ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ Function#bind, рдЖрдкрдХреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реИ, рдФрд░ рдпрд╣ рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдЧрднрдЧ рд╕рднреА рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ рдХрд╛рдлреА рдмреНрд░реЗрдХрд┐рдВрдЧ рд╣реИред

 var fn = console.log.by(console, _, 2, _, 4); fn(1, 3, 5); // => 1, 2, 3, 4, 5 

# рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рд╡рд┐рдзрд┐


рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ - fn(foo.bar.baz.bind(foo.bar))ред рд╣рдореЗрдВ foo.bar2 рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдпрд╣ DRY рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрд▓реНрд▓рдВрдШрди рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЕрдореВрд░реНрдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ , рд▓реЗрдХрд┐рди рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ред ~рд▓рд╛рдЗрд╡рд╕реНрдХреНрд░рд┐рдкреНрдЯ - fn(foo.bar~baz)( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ) рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдФрд░ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ ред

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╕рд┐рд░ рдкрд░ рдЖрддреЗ рд╣реИрдВ - рдЬрдм рддрдХ рдХрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рд╕реЗ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдзрд┐ рди рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛рдПред рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _.bindKeyрд╕реЗLoDash (рд▓реЗрдХрд┐рди рдЬрд▓реНрджреА рдмрдВрдзрди рдХреЗ рд╕рд╛рде), рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдХрд╛рдлреА рдмреЛрдЭрд┐рд▓ рд╣реИ рдФрд░ рдЖрдЧреЗ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкрдардиреАрдпрддрд╛, рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдмрд┐рдЧрдбрд╝ рдЬрд╛рддреА рд╣реИ Object.prototypeрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Object#boundToрд╕реЗ Eddy.js ред

рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ Object.prototypeред рд╣рдо Object.prototypeрдХрдо-рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдЗрд╕реЗ рдЬреЛрдЦрд┐рдо рдореЗрдВ рдирд╣реАрдВ for-inрдбрд╛рд▓реЗрдВрдЧреЗ , рдХрдо рд╕реЗ рдХрдо рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╕рдВрдШрд░реНрд╖реЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ IE8 рдореЗрдВ рддреЛрдбрд╝ рджреЗрдВрдЧреЗ ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ _ред рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рди рдХрд░рдиреЗ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯ _рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓реЗрдВ toString(рдХреНрд░рдорд╢рдГ, рдпрджрд┐ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ .js рдпрд╛ LoDash рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдкрдХреЛ core.dr рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛рдЙрдирдХреЗ рдмрд╛рдж)ред рдпрд╣ # рд╡рд░реНрдг рдкреЙрд▓реАрдлрд╝рд╛рдЗрд▓ рдХреБрдВрдЬреА рдХреЗ рд╕рдорд╛рди рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреА-рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рдПрдЧрд╛ ред рдЗрд╕ рдХреБрдВрдЬреА рдореЗрдВ рд╡рд┐рдзрд┐ c рдЬреЛрдбрд╝реЗрдВ Object.prototypeред рдПрдХ # рдЕрдЬреАрдм рдмрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдЧрдВрджреЗ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ , рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ IE8- рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ for-inред

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЬрд┐рд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдХреА, рд╡рд╣ рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ fn(foo.bar[_]('baz'))- рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╡рд╕реНрддреБ рдХреЗ рджреВрд╕рд░реЗ рдЙрд▓реНрд▓реЗрдЦ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ред рд▓реМрдЯреА рд╡рд┐рдзрд┐ рдХреИрд╢ рдХреА рдЧрдИ рд╣реИред рдЙрджрд╛рд╣рд░рдг :

 ['foobar', 'foobaz', 'barbaz'].filter(/bar/[_]('test')); // => ['foobar', 'barbaz'] var has = {}.hasOwnProperty[_]('call'); console.log(has({key: 42}, 'foo')); // => false console.log(has({key: 42}, 'key')); // => true var array = [] , push = array[_]('push'); push(1); push(2, 3); console.log(array); // => [1, 2, 3]; 

рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, IE8 рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдбрд░рд╛рд╡рдирд╛ рд╣реИ :) tie, boundTo, bindKeyрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ, рдХрдо рд╕реЗ рдХрдо рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдХреБрдВрдЬреА рдЙрдард╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ ES6

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ Proxyрдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реЛрдЧрд╛ - рд╡рд┐рдзрд┐ рдХреА рдХреБрдВрдЬреА рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рдВрдкрддреНрддрд┐ рддрдХ рдирд┐рдпрдорд┐рдд рдкрд╣реБрдВрдЪ - fn(foo.bar[_].baz)рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ ProxyрдХрд┐рд╕реА рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдЦреЛрдП, рдЬреИрд╕реЗ (рдЧреЗрдЯреНрдЯрд░, рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдФрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╕рднреА), рд╣рдо рдЕрднреА рднреА рдЗрд╕реЗ рдмрд░реНрджрд╛рд╢реНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг, рдЕрдм рддрдХ рдХреЗрд╡рд▓ рд░рд╛рдд рдХреА рдЖрдЧ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
 var _ = Symbol(); Object.defineProperty(Object.prototype, _, { get: function(){ return new Proxy(this, { apply: function(){ /*    [_]    */ }, get: function(context, name){ return context[name].bind(context); } }); } }); ['foobar', 'foobaz', 'barbaz'].filter(/bar/[_].test); // => ['foobar', 'barbaz'] var has = {}.hasOwnProperty[_].call; console.log(has({key: 42}, 'foo')); // => false console.log(has({key: 42}, 'key')); // => true var array = [] , push = array[_].push; push(1); push(2, 3); console.log(array); // => [1, 2, 3]; 

# рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ


рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ ред рдЗрд╕рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ parseInt- рдХрд╛рдлреА рдЕрд╕реНрдкрд╖реНрдЯ, рдХреЛрдИ рднреА рдПрдХ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рддрд╛рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди Numberрдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмрд┐рдВрджреБ рдЙрдирдХреЗ "рдЦрддрд░реЗ" рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрдВ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд╛рдВрддреНрд╡рдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕реНрд╡рдпрдВ рддрддреНрд╡ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ:

 [1, 2, 3].forEach(console.log); // => 1 0 [1, 2, 3] // => 2 1 [1, 2, 3] // => 3 2 [1, 2, 3] 

рд╡рд┐рдзрд┐ .forEach, рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣, рдХреЙрд▓рдмреИрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рджреЗрддреА рд╣реИ - рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдЦреБрдж рд╕рд░рдгреАред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдирдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛:

 [1, 2, 3].forEach(function(it){ console.log(it); }); // => 1, 2, 3 

рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд▓реЗрдЦ рдореЗрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреА рдЧрдИ рдереА Function#onlyред рд╣рдо рдЗрд╕рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рддрд░реНрдХ, рддрд░реНрдХреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рджреВрд╕рд░рд╛, рд╡реИрдХрд▓реНрдкрд┐рдХ, рд╕рдВрджрд░реНрдн рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг :

 [1, 2, 3].forEach(console.log.only(1)); // => 1, 2, 3 

рдмреЗрд╢рдХ, рдЕрдЧрд░ рддрд░реНрдХреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ 1 рд╣реИ, рддреЛ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ, рдпрджрд┐ рдЙрдкрд▓рдмреНрдз рд╣реИ, рддреЛ ES6 рдпрд╛ рдХреЙрдлреА рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред

# рджрд┐рдирд╛рдВрдХ рд╕реНрд╡рд░реВрдкрдг



рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддрд╛рд░реАрдЦ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдореЗрдВ "11/18/2014 06:07:25" рдкреНрд░рд╛рд░реВрдк рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ? рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдбрд░рд╛рд╡рдирд╛ рд╣реИ :

 var date = new Date; function lz2(it){ return it > 9 ? it : '0' + it; } var format = [date.getDate(), date.getMonth() + 1, date.getFullYear()].map(lz2).join('.') + ' ' + [date.getHours(), date.getMinutes(), date.getSeconds()].map(lz2).join(':'); console.log(format); // => '18.11.2014 06:07:25 ' 

рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдордВрдЧрд▓рд╡рд╛рд░, 18 рдирд╡рдВрдмрд░ 2014, 6:07:25" рдкреНрд░рд╛рд░реВрдк рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ ?

рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЕрдВрддрд░реНрд░рд╛рд╖реНрдЯреНрд░реАрдпрдХрд░рдг рдорд╛рдирдХ ECMA402 , рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ , рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдорд╛рдирдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ Intl рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рджрд┐рдирд╛рдВрдХ, рд╕рдВрдЦреНрдпрд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛рдУрдВ рдХреЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╕реНрд╡рд░реВрдкрдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдзрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рд╕реНрддрд░ рдкрд░, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ Intl рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдорд╛рдирдХ рдЙрди рдкрд░ 2 рддрд░реНрдХ рдЬреЛрдбрд╝рдХрд░ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ: рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдФрд░ рдкреНрд░рд╛рд░реВрдк рд╡рд┐рдХрд▓реНрдкред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рдХрд░реАрдм рдПрдХ рддрд╛рд░ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ :Date#toLocaleString, Date#toLocaleDateString, Date#toLocaleTimeString

 new Date().toLocaleString('ru-RU', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: '2-digit', second: '2-digit' }); // => ', 18  2014 ., 6:07:25' 

рдпрд╣ рдмреЛрдЭрд┐рд▓ рдЬрд░реВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИред рдорд╛рдирдХ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЦрд░рд╛рдм рдирд╣реАрдВред рдпрд╣ рдХреНрд░реЛрдо, рдУрдкреЗрд░рд╛, IE11 рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЛ IE10-, рд╕рдлрд╛рд░реА, рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╢реИрддрд╛рди рдЕрднреА рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╣реИ ред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рдЬрди рд╣реЛрдЧрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, core.js рдореЗрдВ рдФрд░ рдХреЛрдИ Polyphemus ECMA402 ред

# рд╕рд░рд▓ рджрд┐рдирд╛рдВрдХ рд╕реНрд╡рд░реВрдкрдг рдЬреЛрдбрд╝реЗрдВред


рд╕рд░рд▓ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЖрдкрдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдкреВрд░реНрдг рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдпрд╛ рдЕрдиреНрдп рдЙрдиреНрдирдд рджрд┐рдирд╛рдВрдХ рдЯреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВ, рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд┐рдерд┐ рдкреНрд░рд╛рд░реВрдкрдг рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреЛрдИ рднреА рдореЛрдореЗрдВрдЯ.рдЬреЗрдПрд╕ рдпрд╛ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ Intlред рдпрд╣рд╛рдВ, рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдореЙрдбреНрдпреВрд▓ рдХрдИ рджрд╕рд┐рдпреЛрдВ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВред

рд╡рд┐рдзрд┐ Date#formatрдФрд░ рдЗрд╕рдХрд╛ UTC рд╕рдВрд╕реНрдХрд░рдг Date#formatUTC( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ) рдЬреЛрдбрд╝реЗрдВ:

 new Date().format('W, D MM Y ., h:mm:ss', 'ru'); // => ', 18  2014 ., 6:07:25' new Date().formatUTC('W, D MM Y ., h:mm:ss', 'ru'); // => ', 18  2014 ., 0:07:25' 

рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рджрдЧреА рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреА рдЦрд╛рддрд┐рд░, рд╣рдо рд╕рдВрдХреЗрддрди рдХреЛ рдврд╛рд▓рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЬрдмрдХрд┐ рдЙрдирдХрд╛ рдиреНрдпреВрдирддрдо рдЙрдкрд▓рдмреНрдз рд╣реИ:

 s |  | 0-59 ss | , 2  | 00-59 m |  | 0-59 mm | , 2  | 00-59 h |  | 0-23 hh | , 2  | 00-23 D |  | 1-31 DD | , 2  | 01-31 W |  ,  |  N |  | 1-12 NN | , 2  | 01-12 M | ,  |  MM | ,  |  Y | ,  | 2014 YY | , 2  | 14 

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд░реВрд╕реА ( ru) рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА ( en) рд╕реНрдерд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд▓реЛрдХреЗрд▓ рдпрд╛ рддреЛ рд╡рд┐рдзрд┐ core.localeрджреНрд╡рд╛рд░рд╛ рдпрд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рджреВрд╕рд░реЗ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Date#formatрдФрд░ Date#formatUTC( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ):

 new Date().format('W, D MM Y', 'ru'); // => ', 18  2014' new Date().format('W, D MM Y'); // => 'Tuesday, 18 November 2014' core.locale('ru'); new Date().format('W, D MM Y'); // => ', 18  2014' 

рд╕реНрдерд╛рдиреАрдп рдкреНрд░рд╛рд░реВрдк рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ core.addLocale, рд▓реЗрдХрд┐рди рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг, рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕реНрдерд╛рдиреАрдп рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рдкрд░ рджрд┐рдЦреЗрдЧрд╛:

 (typeof core != 'undefined' ? core : require('core-js/library')).addLocale('ru', { weekdays: ',,,,,,', months: ':|,:|,:|,:|,:|,:|,:|,:|,:|,:|,:|,:|' }); 

рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг :

 new Date().format('DD.NN.YY'); // => '18.11.14' new Date().format('hh:mm:ss'); // => '06:07:25' new Date().format('DD.NN.Y hh:mm:ss'); // => '18.11.2014 06:07:25' new Date().format('W, D MM Y '); // => ', 18  2014 ' new Date().format('D MM, h:mm'); // => '18 , 6:07' new Date().format('M Y'); // => ' 2014' 

# рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдкреАрдЖрдИ



# рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ : ECMAScript 5 рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдЖрдк рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рдХреЛ рдХреЗрд╡рд▓Object.defineProperty/рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВObject.defineProperties, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдкреВрд░реНрдг рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк рдЧреИрд░-рдЧрдгрди рдпрд╛ рдкреБрди: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдЬреИрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ, рдФрд░ рдпрд╣ рдмреЛрдЭрд┐рд▓ рд╣реИред

рд╡рд┐рдзрд┐ # рдХреЗObject.assign рдЕрд▓рд╛рд╡рд╛, ECMAScript 6 рдореЗрдВ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереАObject.mixinрдЬреЛ рд╕реНрд░реЛрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рд╡рд┐рд╡рд░рдг рдореЗрдВ рд▓реЗ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд┐ рдХреЛ рдХреАрд╡рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕реНрд░реЛрдд рд╡рд╕реНрддреБ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдирд╛ рдерд╛superред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдорд╛рдирдХ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛ред

Object.defineрд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ Object.mixin- рд╕реНрд░реЛрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛, рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛, рд▓реЗрдХрд┐рди superECMAScript 5 рдореЗрдВ рдХреАрд╡рд░реНрдб рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдирд╣реАрдВ ред

 // : Object.defineProperty(target, 'c', { enumerable: true, configurable: true, get: function(){ return this.a + this.b; } }); // : Object.define(target, { get c(){ return this.a + this.b; } }); 

# рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ : ECMAScript 5 рдореЗрдВ, рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рднреА рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИObject.createред рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдкрдиреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рддрд░реНрдХObject.create, рдЬреИрд╕реЗObject.defineProperties, рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╡рд░реНрдгрдирдХрд░реНрддрд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдпреБрдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реИред

рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВObject.make- рдПрдХ рдПрдирд╛рд▓реЙрдЧObject.create, рджреВрд╕рд░рд╛ рддрд░реНрдХ рдПрдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╡рд╕реНрддреБ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рддреЗ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

 //        : var copy = Object.make(Object.getPrototypeOf(src), src); //   : function Vector2D(x, y){ this.x = x; this.y = y; } Object.define(Vector2D.prototype, { get xy(){ return Math.hypot(this.x, this.y); } }); function Vector3D(x, y, z){ Vector2D.apply(this, arguments); this.z = z; } Vector3D.prototype = Object.make(Vector2D.prototype, { constructor: Vector3D, get xyz(){ return Math.hypot(this.x, this.y, this.z); } }); var vector = new Vector3D(9, 12, 20); console.log(vector.xy); // => 15 console.log(vector.xyz); // => 25 vector.y++; console.log(vector.xy); // => 15.811388300841896 console.log(vector.xyz); // => 25.495097567963924 

ECMAScript 7 рдореЗрдВ Object.getOwnPropertyDescriptors рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ , рдЬреЛ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЗ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдпреБрдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯред рдЖрджрд░реНрд╢ рдЬреЛрдбрд╝реА рдХреЛ рдПрдХ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Object.defineProperties, рдФрд░ Object.createрдХреБрдЫ рд╣рдж рддрдХ, рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП, рдФрд░, Object.makeрдФрд░ Object.defineред рд╡рд╣ рднреА рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реИред

# рдЕрд░реНрд░реЗ



# рдПрд░реЗ # рдореЗрдВ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ(рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрдм рддрдХ -Array#containsрдПрдХ рдореВрдЯреНрд╕ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдЕрднреА рднреА рдкреБрд░рд╛рдиреЗ рдирд╛рдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ) рдХреЛ ECMAScript 7 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рдпрд╣ рдореМрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддArray#indexOf, рдпрд╣ # SameValueZero рддреБрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИрдФрд░ рдЫрд┐рджреНрд░реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛, рд╡реИрдХрд▓реНрдкрд┐рдХ, рддрд░реНрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИред рдЙрджрд╛рд╣рд░рдг :

 [1, 2, 3].includes(2); // => true [1, 2, 3].includes(4); // => false [1, 2, 3].includes(2, 2); // => false [NaN].indexOf(NaN); // => -1 [NaN].includes(NaN); // => true Array(1).indexOf(undefined); // => -1 Array(1).includes(undefined); // => true 

# рд▓реЗрдХрд┐рди рддрд░реАрдХрд╛Array#turnрдореЗрд░реА рдмреАрдорд╛рд░ рдХрд▓реНрдкрдирд╛ рдХрд╛ рдлрд▓ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИ - рдпрд╣ LoDash_.transform рд╕реЗрдПрдХ рд╕рдорд╛рди рд╡рд┐рдзрд┐рд╣реИред рдпрд╣рдХреЙрд▓рдмреИрдХ рд╕реЗ рдмреИрдЯрд░реА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдмреИрдЯрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдХ рдирдпрд╛ рд╕рд░рдгреА) рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЛ рдореЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПрд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рд╡рд┐рдзрд┐ рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдорд╛рди рд╣реИрдВред рдЖрдк рдХреЙрд▓рдмреИрдХ рд╕реЗ рд▓реМрдЯрдХрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг :Array#reduceArray#reducefalse

 //   : [1, 2, 3, 4, 5].reduce(function(memo, it){ memo['key' + it] = !!(it % 2); return memo; }, {}); // => {key1: true, key2: false, key3: true, key4: false, key5: true} [1, 2, 3, 4, 5].turn(function(memo, it){ memo['key' + it] = !!(it % 2); }, {}); // => {key1: true, key2: false, key3: true, key4: false, key5: true} // filter + map + slice,   : [1, 2, 3, 4, 5, 6, 7, 8, 9].map(function(it){ return it * it; }).filter(function(it){ return it % 2; }).slice(0, 2); // => [1, 9] [1, 2, 3, 4, 5, 6, 7, 8, 9].turn(function(memo, it){ it % 2 && memo.push(it * it); if(memo.length == 2)return false; }); // => [1, 9] 

# рдирдВрдмрд░



# рдпрд╛рдж рд░рдЦреЗрдВ # рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдЕрдзреНрдпрд╛рдп рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг ? рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдордирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЕрд╡рд╕рд░ред рдмрд╣реБрдд рд╣реА рдХрдо рдЪрдХреНрд░, рд╕рдордп рдХреА рдПрдХ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░for-ofрдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдпрд╛ рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд░рд▓ рдкреАрдврд╝реА #Array.from (рдФрд░ рд╢рд╛рдпрдж # рдкреНрд░рд╕рд╛рд░ ), рдЖрджрд┐ рддреЛ рдЪрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг :

 //  : for(var i = 0; i < 3; i++)console.log(i); // => 0, 1, 2 // for-of   : for(var i of 3)console.log(i); // => 0, 1, 2 //   for-of, : $for(3).of(console.log); // => 0, 1, 2 //    : // .map  ""   Array(10).map(Math.random); // => [undefined ├Ч 10] // ES5 ,   : Array.apply(undefined, Array(10)).map(Math.random); // => [0.9442228835541755, 0.8101077508181334, ...] // ES6 ,   : Array(10).fill(undefined).map(Math.random); // => [0.5587614295072854, 0.009569905698299408, ...] // Number Iterator: Array.from(10, Math.random); // => [0.9817775336559862, 0.02720663254149258, ...] Array.from(10); // => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Array.from(10, function(it){ return this + it * it; }, .42); // => [0.42, 1.42, 4.42, 9.42, 16.42, 25.42, 36.42, 49.42, 64.42, 81.42] // Comprehensions: [for(i of 10)if(i % 2)i * i]; // => [1, 9, 25, 49, 81] Dict((for(i of 3)['key' + i, !(i % 2)])); // => {key0: true, key1: false, key2: true} $for(10).filter(function(i){ return i % 2; }).array(function(i){ return i * i; }); // => [1, 9, 25, 49, 81] Dict($for(3).map(function(i){ return ['key' + i, !(i % 2)]; })); // => {key0: true, key1: false, key2: true} 

# рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпNumber.prototype- рд╕реБрдЦрдж рдЪреАрдЬреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рд╕реЗред рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ рд╕реБрдЧрд░ рдФрд░ рдореВрдЯреНрд╕ рдореЗрдВ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯMathрдореЗрдВрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗNumber.prototypeред рдпрд╣рд╛рдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ - рд╕рдВрджрд░реНрдн рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдореМрдЬреВрджрд╛, рдорд╛рдирдХреАрдХреГрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ :)

рд╣рдо рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВNumber#randomред рдпрд╣ рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХ рдХреЗ рдмреАрдЪ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 0 рд╣реИ)ред

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

 3..pow(3); // => 27 (-729).abs().sqrt(); // => 27 10..random(20); // =>   (10, 20), , 16.818793776910752 10..random(20).floor(); // =>   [10, 19], , 16 var array = [1, 2, 3, 4, 5]; array[array.length.random().floor()]; // =>   , , 4 

# рд╡рд┐рд╢реЗрд╖ рдкрд╛рддреНрд░реЛрдВ рд╕реЗ рдмрдЪрдирд╛



# рдпрджрд┐ рдореИрдВ рдЕрдЪрд╛рдирдХ, рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ HTML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдорд╣рд╛рди рд░рд╣рд╕реНрдп рдирд╣реАрдВ рдЦреЛрд▓рд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ HTML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ рдврд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджрд┐рдо рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЦреАрдВрдЪрдирд╛ рдЙрдЪрд┐рдд рд╣реИ? HTML рднрд╛рдЧрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕рднреА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╣реИрдВред рдЪреАрдиреА, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ, MooTools рддрд░реАрдХреЗ рд╣реИрдВescapeHTMLрдФрд░unescapeHTMLрдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓рд╛рдЗрдиред рдЖрдЗрдП рдЗрд╕ рдкрд░рдВрдкрд░рд╛ рдХреЛ рди рддреЛрдбрд╝реЗрдВ:

 '<script>doSomething();</script>'.escapeHTML(); // => '&lt;script&gt;doSomething();&lt;/script&gt;' '&lt;script&gt;doSomething();&lt;/script&gt;'.unescapeHTML(); // => '<script>doSomething();</script>' 

# рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕рд╣реА / рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рднреА рдврд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реБрдЧрд░, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рдореВрдУрдЯрд▓реНрд╕, рдХрд╣реАрдВ рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердбRegExp, рдХрд╣реАрдВ рдореЗрдердб рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВString.prototypeред рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рдХреЛ ECMAScript рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдордЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ:

 RegExp.escape(' -[]{}()*+?.,\\^$|'); // => ' \-\[\]\{\}\(\)\*\+\?\.\,\\\^\$\|' 

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



рдЦреИрд░, рдРрд╕рд╛ рд╣реА рдХреБрдЫред

рдореИрдВ рдорд╛рдирдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ-рдорд╛рдиреЗ xkcd рдЪрд┐рддреНрд░ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рд╡реЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджреЗрдЦрддрд╛, рд╕рд┐рд╡рд╛рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╕реЗ рд╣реЙрдЬрдкреЙрдЯ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реИрдХрдбрд╝реЛрдВ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдХрд╛ рд╡рдЬрдиред

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

рдЖрдкрдХреА рд░рд╛рдп рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдпрд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдХреНрдпрд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдВред рдФрд░ рдлрд┐рд░ рднреА, рдЬрдм рд╕реЗ рдореИрдВ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реЛрдиреЗ рд▓рдЧрд╛ - рдореИрдВ рдКрдм рдЧрдпрд╛ рд╣реВрдВред рдореИрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡реЗрддрди рдХреЗ рд╕рд╛рде рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

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


All Articles