рдПрдХ рдмрдЪреНрдЪреЗ рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрд╛, рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдФрд░ рд╕рд░реНрд╡рд░ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЙрд╕реЗ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛, рдЖрд╕рд╛рдиреА рд╕реЗ, рдЖрд╕рд╛рдиреА рд╕реЗред рддрдм рд╡рд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рджреБрд░реНрдЦреА рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ред
- рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ
рдореИрдВ рдХреНрдпреЛрдВ рд╣реВрдБ? рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдФрд░ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗ рдЖрдзрд╛рд░ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ , рдЬрд┐рд╕ рдкрд░ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛ рдХрд┐рд╕реА рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдореМрдЬреВрдж рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреА рдУрд░ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рд╕рд░реНрд╡рд░ рд╣реЛ, рди рдХрд┐ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреАрдЖрдИ рд╕рд╣рд┐рддред рднрд▓реЗ рд╣реА рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╣реЛрдЧрд╛ред
рд╡реИрдирд┐рд▓рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреИрдВрдбрд░реНрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдорддреМрд░ рдкрд░ рдЕрдЪреНрдЫреА рд╣реИред рдпрд╣ рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдИрд╕реАрдПрдордП -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])));
# рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡реИрд╢реНрд╡рд┐рдХ
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])));
рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЬрд┐рд╕рдореЗрдВ рдХреНрд░рдорд╢рдГ рдХреЗрд╡рд▓ рдкреЙрд▓реАрдлрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЗрд╡рд▓ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
# Node.js рдкрд░ рд╕реНрдерд╛рдкрдирд╛:
npm i core-js
рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдмрдирд╛рддрд╛ рд╣реИ :
# рдпрджрд┐ рдЖрдк рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдХрдВрд╕реЛрд▓ рдореЙрдбреНрдпреВрд▓ рдФрд░ рд╕рд░рд▓ рджрд┐рдирд╛рдВрдХ рд╕реНрд╡рд░реВрдкрдг, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 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);
рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдПрд░реЗ рд╡рд┐рдзрд┐рдпрд╛рдВ
рдЬреЗрдирд░рд┐рдХ рд╣реИрдВ рдФрд░ рди рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдХрд┐рд╕реА рднреА рд╕рд░рдгреА рдЬреИрд╕реА рд╡рд╕реНрддреБ, рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ
# рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдЗрд╕рд▓рд┐рдП, ES5 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░рдгреА рдХреА рддрд░рд╣ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдкрддреНрд░ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
'string'[2] // => 'r'
, рд▓реЗрдХрд┐рди рдкреБрд░рд╛рдиреЗ IE рдореЗрдВ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ
Array#slice
рдФрд░
Array#join
рдХреЛ рдкреБрд░рд╛рдиреЗ IE рдореЗрдВ
Array#join
ред
Array.prototype.map.call('123', function(it){ return it * it; });
рдЦреИрд░, рдкреНрд░рд╛рдЪреАрди рд╕рддреНрдп рдХреЛ рдордд рднреВрд▓рдирд╛:
for-in
рд▓реВрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХреЛ рдХрднреА рднреА рдмрд╛рдпрдкрд╛рд╕ рди рдХрд░реЗрдВ ред рдпрд╣ рди рдХреЗрд╡рд▓ рдзреАрдорд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд▓ рднреА рд╣реИ, рдЕрдЧрд░ IE8- рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдХреБрдВрдЬреА рдЙрдЪрд┐рдд рд╣реИ - рдЕрдиреНрдпрдерд╛, рди рдХреЗрд╡рд▓ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рддрд░реАрдХреЗ рднреА :)
# рд╕реНрдЯреЗрдЯрд┐рдХ рдореЗрдердб
Array.isArray рдЙрд╕реА рд╢реНрд░реЗрдгреА рдХрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдпрд╣ рдЬрд╛рдВрдЪрддреА рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЖрдВрддрд░рд┐рдХ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕рд░рдгреА рд╣реИред рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИред рд╣рдо рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ
# рджреВрд╕рд░реЗ, рд╕рд╛рдЗрдХрд┐рд▓, рд▓реЗрдЦ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ ред
Array.isArray([1, 2, 3]);
# рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдкреАрдЖрдИ
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 );
# 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);
# 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}));
# рд╡рд┐рд╡рд░рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЦрд░рд╛рдм рд╣реИ, 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);
# Date.now рдкрджреНрдзрддрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рд▓реМрдЯрд╛рддреА рд╣реИ, рдкрд░рд┐рдгрд╛рдо
+new Date
рдХреЗ рд╕рдорд╛рди рд╣реИред
Date.now();
# рд╕реНрдЯреНрд░рд┐рдВрдЧ # рдЯреНрд░рд┐рдо рд╡рд┐рдзрд┐ рдПрдХ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рд╕реЗ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдХреЛ рд╣рдЯрд╛рддреА рд╣реИред
'\n \n'.trim();
JSON
рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ IE8 рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдФрд░, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░, рдореБрдЭреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдЧреИрддрд┐рд╣рд╛рд╕рд┐рдХ IE рдореЗрдВ рд╣реИ - рдХреЛрдИ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдпрд╣ рдкреЙрд▓реАрдлрд╛рдЗрд▓ред
# ECMAScript 6
рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдХрднреА рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 4 рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдВрддрд┐рдо рд╕рд╣рд╕реНрд░рд╛рдмреНрджреА рдореЗрдВ рдЕрдкрдирд╛рдИ рдЧрдИ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3 рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рднрд╛рд╖рд╛ рд▓рдЧрднрдЧ рдкреВрд░реА рд╣реЛ рдЪреБрдХреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдФрд░ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, ECMAScript 6 рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдиред рдЗрд╕рдХреЗ рд▓рд┐рдП рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЬреЛрдбрд╝ рдЬрдореА рд╣реИ, рд╕рднреА рдкреНрд░рдореБрдЦ рдкрд░рд┐рд╡рд░реНрддрди ECMAScript 7 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдореЗрдВ рдЖ рд░рд╣реЗ рд╣реИрдВ, рдорд╕реМрджрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╣рд╛рд▓рд┐рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрдЧ рд╕реБрдзрд╛рд░ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ ES6 рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рд╡рд░реНрддрдорд╛рди рдЗрдВрдЬрди рдореЗрдВ рдЗрд╕рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде
рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИред
- рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ - рдПрдХ рдмрд╣реБрдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реИред
- # V8 рдореЗрдВ (Chrome, Opera, Node.js) рдХрд╛рдлреА рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╡рд░реБрджреНрдз рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ "рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ" (рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдВрдХ
chrome://flags/#enable-javascript-harmony
рдЦрд╛рддрд╛ рд╣реИ chrome://flags/#enable-javascript-harmony
), рдФрд░ Node.js - --harmony
рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде --harmony
ред рдзреНрд╡рдЬ рдХреЗ рдмрд┐рдирд╛ рднреА рдХреБрдЫ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Promise
, WeakMap
рдФрд░ WeakSet
, рдФрд░ рдХреНрд░реЛрдо 38 Symbol
, Map
, Set
, WeakSet
рд╕рд╛рде рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ Node.js рдкрд┐рдЫрдбрд╝ рдЬрд╛рддрд╛ рд╣реИ, рдЪреВрдВрдХрд┐, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдерд┐рд░ рд╢рд╛рдЦрд╛ рдореЗрдВ, v8 рдХреЛ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХреЛрдИ рднреА рдЖрдкрдХреЛ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред - IE , рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдмреБрд░рд╛ рд╣реИ, рд▓реЗрдХрд┐рди 11 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдПрдХ рдЬреЛрдбрд╝реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЬреЛрдбрд╝реА рдЧрдИрдВред рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╡реЗ рдмрд╣реБрдд рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВ ред
- рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдлрд╛рд░реА рдореЗрдВ рдИрдПрд╕ 6 рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЬреЛрдбрд╝рд╛ рд╣реИ, рдорд╛рдирдХ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд▓рд┐рдВрдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред
рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдИрдПрд╕ 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);
рдпрд╣ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рднреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА Object.mixin
рдЬрд┐рд╕рдореЗрдВ рдЧреИрд░-рд╡рд┐рд▓реБрдкреНрдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рднреА рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдФрд░ рдХреАрд╡рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрднрд┐рднрд╛рд╡рдХреЛрдВ рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд┐рдпрд╛ super
ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ # рд╕рд╛рдЗрдХрд┐рд▓ рдкрд╛рд░реНрдЯ рдореЗрдВ рд╣реИ ред# рд╡рд╕реНрддреБ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдЖрдорддреМрд░ рдкрд░ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред ==
рдЕрдкрдиреЗ рд╕рдВрдЪрд╛рд▓рдХреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдРрд╕реЗ рдСрдкрд░реЗрдЯрд░ рдХреЛ рднреВрд▓ рдЬрд╛рдЗрдП , рджреЗрдЦрд┐рдП ===
: NaN === NaN
рдмрд╕ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕реЗрдорд╡реИрд▓реНрдпреВ рддреБрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ ред рдЗрд╕рдХреЗ рд▓рд┐рдП NaN
рд╣реИ NaN
, рдФрд░ +0
рдФрд░ -0
рдЕрд▓рдЧред ECMAScript 6 рдореЗрдВ, рд╡реЗ рдЗрд╕реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рд╣рд░ рд▓рд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ is
рдФрд░ isnt
, рд▓реЗрдХрд┐рди, рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рднрд╛рд╖рд╛ рдореЗрдВ рддреБрд▓рдирд╛рддреНрдордХ рдСрдкрд░реЗрдЯрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдкрд┐рдЫрдбрд╝реЗ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ Object.is рдкрджреНрдзрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдХрд╛рд▓рд╛ рдЧрдпрд╛ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : Object.is(NaN, NaN);
# рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ 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;
рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдРрд╕рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрд╡рд╕рд░ - рджреЗрдЦреЛ, рдХрдо рд╕реЗ рдХрдо рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг - рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ 5 рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рд░рд╛рд╕рдд рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдЧреИрд░-рдорд╛рдирдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ __proto__
ред рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рд╕рднреА рдореМрдЬреВрджрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ IE10- рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдЧреЗрдЯрдЯрд░ / рд╕реЗрдЯрд░ Object
редрдЖрджрд┐рдо, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдВрдЪ рдФрд░ рд╡рд╕реНрддреБ рд╡рд╛рдкрд╕реА рдХреЗ рдмрд┐рдирд╛, рд╕рдВрд╕реНрдХрд░рдг Object.setPrototypeOf
рд╕рд░рд▓ рджрд┐рдЦреЗрдЧрд╛ - рд╕реЗрдЯрд░ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓реЗрдВ __proto__
рдФрд░ рдЗрд╕рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдВ: var setPrototypeOf = Function.call.bind(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ - рдкреБрд░рд╛рдиреЗ рдореЗрдВ, рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, v8 рдХреЗ рд╕рдВрд╕реНрдХрд░рдг, рд╕реЗрдЯрд░ __proto__
рдХреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП Object.setPrototypeOf
, рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ __proto__
редрдЗрд╕рд▓рд┐рдП рд╣рдо рдЬреАрддреЗ рд╣реИрдВ:
- IE10 рдХреЗ рд▓рд┐рдП- рдЕрдиреБрдХрд░рдг
Object.setPrototypeOf
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИред - рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ v8
Object.setPrototypeOf
рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЕрдиреБрдкрд╕реНрдерд┐рдд Object.prototype
рдпрд╛ рд╕рдВрдкрддреНрддрд┐ __proto__
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рд░реЛрд╣рд┐рдд, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Object.defineProperty
ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 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]));
# рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, Array.of рдкрджреНрдзрддрд┐рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдмреЗрдХрд╛рд░ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдкрд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдПArray
, рдПрдХ рд╕рд░рдгреА рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рдПрдирд╛рд▓реЙрдЧ рдХреЗ рд░реВрдк рдореЗрдВ[]
ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : Array.of(1);
# рддрд░реАрдХреЗ рд╕рд░рдгреА # рдЦреЛрдЬрдиреЗ рдФрд░ рд╕рд░рдгреА # findIndex рдХреЙрд▓рдмреИрдХ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреЛрдЬ рд╕рд░рдгреА рд▓реЗ рдЧрдПред рдПрдХ рдЙрджрд╛рд╣рд░рдг : function isOdd(val){ return val % 2; } [4, 8, 15, 16, 23, 42].find(isOdd);
# рдПрд░реЗ рд╡рд┐рдзрд┐ # рдПрд░реЗ # рднрд░реЗрдВ рд╕рд░рдгреА рдХреЛ рдкрд╛рд░рд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рднрд░рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ - рдкрджреЛрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : Array(5).map(function(){ return 42; });
# рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рддрд░реАрдХреЗ
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред
рд╕реНрдЯреНрд░рд┐рдВрдЧ # рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ (рд╣рд╛рд▓ рд╣реА рдореЗрдВ рддрдХ - String#contains
рд▓реЗрдХрд┐рди #Array#includes
рдЗрд╕реЗ рд╕рд╛рде рд▓рд┐рдпрд╛, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдкреБрд░рд╛рдиреЗ рдирд╛рдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ) рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЪреЗрдХред рд╕реНрдЯреНрд░рд┐рдВрдЧ # рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ # рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рдпреЗ 3 рд╡рд┐рдзрд┐рдпрд╛рдБ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд▓реЗрддреА рд╣реИрдВ - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : 'foobarbaz'.includes('bar');
рд╕реНрдЯреНрд░рд┐рдВрдЧ # рд░рд┐рдкреАрдЯ рд╡рд┐рдзрд┐ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рджреЛрд╣рд░рд╛рддреА рд╣реИ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : 'string'.repeat(3);
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдиреЗ рдЕрднреА рддрдХ рдорд▓реНрдЯреАрдмреИрдЯ рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╕рдорд░реНрдерди рдФрд░ рдПрдХ рдИрдорд╛рдирджрд╛рд░ # рд▓рд╛рдЗрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП 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());
рдкреНрд░рддреАрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдЬреА рдирд╣реАрдВ рд╣реИрдВ - рд╡рд┐рдзрд┐ 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
: рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред - : IE8- ( #
Object.defineProperty
), Object.prototype
, ┬л┬╗ . - ,
Object.prototype
(, Object.create(null)
), ┬л┬╗ . Symbol() in {}
true
тАФ .typeof Symbol()
'object'
тАФ JavaScript .Object.getOwnPropertySymbols
тАФ Object.getOwnPropertyNames
, , Object.getOwnPropertyNames
, , ┬л┬╗.
# рдЕрдЧрд░ рдлреИрд╕рд▓рд╛ рдЗрддрдирд╛ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ, рддреЛ рд╡рд╣ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ? рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд╛рддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╡реЗ рдЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрд╡рдпрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВObject.prototype
, рддреЛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреБрдЫ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВредSymbol.pure
рдпрджрд┐ рдореВрд▓ рд╡рд░реНрдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬреЛ рдПрдХ рд╡рд░реНрдг рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдирд╣реАрдВ - рдПрдХ рд╕реЗрдЯрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИObject.prototype
рдФрд░Symbol.set
рдпрджрд┐ рдореВрд▓ рд╡рд░реНрдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВ - рддреЛ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛, рдирд╣реАрдВ -Object.defineProperty
cрдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛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);
# ES6 рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдВрджрд┐рдЧреНрдз рдмрд╛рдд рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ - Symbol.for рдФрд░ Symbol.keyFor ред Symbol.for
рдпрд╣ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЦреЛрдЬ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреА-рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╡рд░реНрдг рджреЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИ - рдПрдХ рдирдпрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред Symbol.keyFor
рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╡рд░реНрдг рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг : var symbol = Symbol.for('key'); symbol === Symbol.for('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);
# рд╕реЗрдЯ - рдЕрджреНрд╡рд┐рддреАрдп рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ред рд╕рд╛рде рдореЗрдВMap
, рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг : var set = new Set(['a', 'b', 'a', 'c']); set.add('d').add('b').add('e'); console.log(set.size);
# рдХрдордЬреЛрд░ - рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣, рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдХрдордЬреЛрд░ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЬрдм рдХреБрдВрдЬреА рдСрдмреНрдЬреЗрдХреНрдЯ (рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░ рджреНрд╡рд╛рд░рд╛) рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реА рднреА рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рдЪрд╛рд░реЛрдВ рдУрд░ рдкрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЙрдкрд╛рдп рдирд╣реАрдВ рд╣реИ - рдХреЛрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ.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));
# рдХрдордЬреЛрд░ - рдареАрдХ рд╣реИ, рддреБрдо рдмрд╛рдд рдХрд░ рд▓реЛ ред рдпрд╣ рдбреНрд░рд╛рдлреНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдХрдордЬреЛрд░ рд╕рдорд░реНрдерди рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг : 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));
рдЗрди рд╕рднреА рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЛ рд╕рдмрд▓рд╛рдЗрдирд░ рдЦреЛрдЬ рд╕рдордп рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдХреБрдВрдЬреА рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ # SameValueZero рддреБрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реИ ред# рдЖрдзреБрдирд┐рдХ js рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдЗрди рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХреНрдпрд╛ рд╣реИ? рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ред- рдореЗрдВ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╡рд╣рд╛рдБ рднрд░рд╛ рд╣реБрдЖ рд╣реИ
Map, Set
рдФрд░ WeakMap
ред рд░рд╛рдд рдореЗрдВ рдмрд┐рд▓реНрдб рдЕрдк рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ WeakSet
ред Map
рдФрд░ Set
рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рд▓реЗ рд▓реЛред Map
рдФрд░ Set
рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ .forEach
ред - v8 тАФ Chrome, Opera Node.js , 4 . Chrome 38, .
WeakMap
WeakSet
. # . v8 , Map
Set
.forEach
, Map
Set
, . - IE11
Map, Set
WeakMap
. . Map
Set
, .forEach
. - Safari , .
Map, Set
WeakMap
. . , , , , , next
. forEach
, 3 , , 1 Set
2 Map
.
рд▓рдЧрднрдЧ рд╕рднреА рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрдЧреНрд░рд╣ рддрд░реАрдХреЛрдВ .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){
рд╣рдо Map
2 рд╕рд░рдгрд┐рдпреЛрдВ рдпрд╛ рддрддреНрд╡ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди 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; } }); })();
рдЖрдЗрдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЬрдм рдПрдХ рдореБрдЦреНрдп рд╕рдВрджрд░реНрдн рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдирд╣реАрдВ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдореЗрдореЛрд░реА рд▓реАрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ:
рд▓реЗрдХрд┐рди рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореЗрдореЛрд░реА рд▓реАрдХ рдХреА рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИред рд╕рдВрдЧреНрд░рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореВрд▓реНрдп рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд░рд╣реЗрдЧрд╛, рдЬреЛ рдХрд┐ рдХреБрдВрдЬреА рдХреЛ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рддрдХ рдПрдХ рд╕реНрдореГрддрд┐ рд░рд┐рд╕рд╛рд╡ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рддреЛ рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдпрд╣ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрдЧреНрд░рд╣ 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();
# рдПрдХ iterable рдСрдмреНрдЬреЗрдХреНрдЯ (Iterable) - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдХреА рдХреБрдВрдЬреАSymbol.iterator
рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рджреЗрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП,Symbol.iterator
рдпрд╣рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИthis
ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддреЗ рд╣реИрдВ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ): Number.prototype[Symbol.iterator] = function(){ return NumberIterator(this); } Array.from(10);
рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ 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);
# рд▓реВрдк рдХреЛfor-of
рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред Iterable рдирдВрдмрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ): for(var num of 5)console.log(num);
# рдореЗрдВ 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);
- рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдпреЗ рд╕рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдБ рд╣реИрдВ
arguments
ред рдЪрдХреНрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред - V8 рдореЗрдВ, рд▓реВрдк
for-of
, рдХреНрд░реЛрдо 38 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рд╕рд░рдгреА рдХреЗ рд╡рд┐рдирд╛рд╢ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдФрд░ рд╕рднреА рдбреЗрдЯрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ arguments
ред рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ (рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде) рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рдереА, рди рдХрд┐ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБред - IE рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рд▓реВрдк рдЕрднреА рддрдХ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдИ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдирд╣реАрдВ рд╣реИрдВред
# рдЪреВрдВрдХрд┐ рдЗрд╕ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЦрд░рд╛рдм рд╣реИ, рдЬреЛ рдИрдПрд╕ 6 + рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛for-of
( рд╕реИрдВрдбрдмреЙрдХреНрд╕ )рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: $for(new Set([1, 2, 3, 2, 1])).of(function(it){ console.log(it);
# рд╡рд╕реНрддреБ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));
# ECMAScript 6 рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ # рд╕рдВрдЧреНрд░рд╣ Map, Set, WeakMap, WeakSet
, рд╕рд░рдгрд┐рдпреЛрдВ # рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗArray.from
рдХрд░рдиреЗ рдХреЗPromise.all, Promise.race
рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , # рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗрддрд░реАрдХреЛрдВ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред# рдкреНрд░рд╕рд╛рд░ рдСрдкрд░реЗрдЯрд░, рдЬреЛ рдХреЙрд▓рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдФрд░ рдПрдХ рд╕рд░рдгреА рд╢рд╛рдмреНрджрд┐рдХ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБ рдХреА рднреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдмрд╣реБрдд рджреВрд░ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ - рджрд╛рдВрддреЛрдВ рдореЗрдВ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : [...new Set([1, 2, 3, 2, 1])];
# рдмрд╛рдХреА рд╕рдм рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рд░рдгреА / рдЬрдирд░реЗрдЯрд░ рдХреА рд╕рдордЭ ( рдПрдХ рд╕рд░рдгреА / рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдЕрдореВрд░реНрддрди? )рднреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╡реЗ ECMAScript 6 рдХреЗ рдорд╕реМрджреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдереЗ, рд▓реЗрдХрд┐рди ECMAScript 7 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рджреЗрд░реА рд╣реБрдИ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡реЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБ рд╕реЗ рдПрдХ рд╕рд░рдгреА рдпрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╛рдиреА
рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ filter
рдФрд░ map
рдХрд┐рд╕реА рднреА iteriruemuh рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП ред рдЙрджрд╛рд╣рд░рдг, рдЕрдВрддрд┐рдо рд╕рд░рдгреА рд╡рд┐рдирд╛рд╢ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдПрдлрдПрдл рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред 6to5 рдФрд░ Traceur рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : var ar1 = [for(i of [1, 2, 3])i * i];
рдореЗрд░реЗ рд▓рд┐рдП - рдПрдХ рднрдпрд╛рдирдХ рдмрд╛рддред рд╡рд╣ рднреА рд╕рд┐рд░реНрдл рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред# рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдИрдПрд╕ 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; });
рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд╕рд╛рде, ES5 рд╕реЗ рдХрд╛рд░реНрдп рдмреЛрдЭрд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдмрд╛рд╣рд░ рдЖрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреАрд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдордЭ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВрдкрд░ рдЕрдиреНрдп рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ $for
, рдЬреЛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдФрд░ рдЖрд▓рд╕реА (рдЬреИрд╕реЗ рдХрд┐ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓) рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЪрд▓рдиреЗ-рдлрд┐рд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдмрджрд▓рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЯрд╛рд▓ рджреЗрдВред рдпрд╛ рд╢рд╛рдпрдж рдирд░реНрдХ рдореЗрдВредрдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝реЗ рдЕрдзрд┐рдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпрд╛рдВ ( # рдмрд╛рд░ , # рджреЛ ) рд╣реЛрддреА рд╣реИрдВ, #Dict
рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╡рд╕реНрддреБ рдХреА рдЙрдореНрдореАрдж рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╕рднреА рдмрд╛рдЗрдХреЛрдВ рдХреЛ рдЗрд╕ рдЕрдзреНрдпрд╛рдп рдореЗрдВ рдирд╣реАрдВ рдЦреАрдВрдЪрд╛ред# ECMAScript 6: рд╡рд╛рджреЗ
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдИ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╣реИрдВред рдпрд╣ рд╕рд┐рд░реНрдл ECMAScript 5 рдорд╛рдирдХ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЗрд╕ рддрд░рд╣ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ setTimeout
рдФрд░ setInterval
W3C рдФрд░ 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){
рдЪреВрдВрдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рд╡рд╛рджреЗ рдХреЗ рдЗрдВрдЬрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рдХреЗ рдЕрдиреБрдХреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛, рдЗрд╕рд▓рд┐рдП рдХреЛрд░ ред рдЬреЗрдПрд╕ рдХрд░реНрдиреЗрд▓ рджреЗрд╢реА-рд╡рд╛рджрд╛-рдХреЗрд╡рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рдХрдо рдХреЛрдб рдмрдЪрд╛ рд╣реИред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, process.nextTick
рдкреЙрд▓рд┐рдлрд╝рд╛рдЗрд▓ # рд╕реЗрдЯрдЗрдордореАрдбреЗрдЯ рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред# рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛPromise.resolve
рдФрд░Promise.reject
рд╡рд╛рдкрд╕реА, рдкреВрд░рд╛ рдХреНрд░рдорд╢: рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдпрд╛ рдореВрд▓реНрдп рдХрд╛ рд╡рд╛рджрд╛ рдЙрдиреНрд╣реЗрдВ рдЖрд╡рдВрдЯрд┐рдд рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдореЗрдВред рдпрджрд┐ рд╡рд╣Promise.resolve
рдХреЛрдИ рд╡рд╛рджрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕реЗ рд▓реМрдЯрд╛ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рддрддреНрдХрд╛рд▓рд┐рдХ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, jQuery рдХреЗ рдЖрд╕реНрдердЧрд┐рдд) рд╡рд╛рджреЛрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдорд╛рдирдХ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдереА -Promise.cast
ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : Promise.resolve(42).then(log);
# рд╣реЗрд▓реНрдкрд░Promise.all
рдПрдХ рд╡рд╛рджрд╛ рд╣реИ рдХрд┐ рд╣реИ, рдЬрдм рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреЗ рд╕рднреА рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╕рдорд╛рдзрд╛рди рджреЗрддрд╛ рд╣реИ # iterable рд╕рдВрдЧреНрд░рд╣ (- рдореИрдВ рдЦрд╛рд╕ рдорддрд▓рдм рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдм v8 рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднреАрддрд░ рд╕рд╣реА рдЕрднреА рддрдХ рдирд╣реАрдВ рдмрди рдЧрдпрд╛ рд╣реИ)ред рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡ рдЬреЛ рд╡рд╛рджреЗ рдирд╣реАрдВ рд╣реИрдВ, рд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВPromise.resolve
ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : Promise.all([ 'foo', sleepRandom(5), sleepRandom(15), sleepRandom(10)
# рд╕рд╣рд╛рдпрдХ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);
# рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рднреА, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрднреА рднреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 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('');
рд╕рдордп рдХреЗ рд╕рд╛рде, рд╡рд╛рджреЗ рдорд╛рдирдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рджреЗрдВрдЧреЗред рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╛рдирдХреАрдХреГрдд рд╣реИ ( рдкреЙрд▓реАрдлрд┐рд▓ ) fetch
- рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░реИрдкрд░ XMLHttpRequest
рдЬреЛ рдПрдХ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХ рд╕рдорд╛рд░реЛрд╣ delay
рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реА рддрд░рд╣ рдХреА, рдПрдХ рд╡рд╛рджрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреЗ рдмрд╛рдж рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ рджреЗрддрд╛ рд╣реИ - рдЕрд▓рд╡рд┐рджрд╛ setTimeout
ред рд╢рд╛рдпрдж delay
рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред# рдореЛрдЬрд╝рд┐рд▓рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдРрд░реЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕реНрдЯреЗрдЯрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг
рд╣рдордиреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣ рд░реЗрдВрдЧрдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИред рдЬреНрдпрд╛рджрд╛ рд╕рд░рд▓, рддреЗрдЬ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рд╛рдЪреАрди рд╣реИред рдпреЗ рд╕рд░рдгреА рдЬреИрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВредрд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдирдХреЗ рд╕рдорд╛рди рдХрдИ рд╕рдВрд╕реНрдерд╛рдПрдБ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд░рдгрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВред рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЬреИрд╕реЗ рд╕рд░рдгрд┐рдпреЛрдВ, рдореЗрдВ рд▓рдВрдмрд╛рдИ .length
рдФрд░ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ [0 рд╕реЗ рдХреБрдВрдЬреА] .length
рдЬрд┐рд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдлрд┐рд░ "рдЫреЗрдж" рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдкрд╛рд╕ Array.prototype
рдХреНрд░рдорд╢рдГ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ , рдЙрдирдХреЗ рдкрд╛рд╕ рд╕рд░рдгреА рд╡рд┐рдзрд┐рдпрд╛рдБ рднреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ arguments
, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ (рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ - IE8 +), рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгрд┐рдпрд╛рдБ (рд╕рд░рдгрд┐рдпрд╛рдБ, рд▓реЗрдХрд┐рди рдЦреБрдж рд╕реЗ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ Array.prototype
), DOM рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рдВрдЧреНрд░рд╣, jQuery рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕, рдЖрджрд┐редрд▓рдЧрднрдЧ рд╕рднреА рд╕рд░рдгреА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐рдпрд╛рдВ рдЬреЗрдиреЗрд░рд┐рдХ рд╣реИрдВ ( рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЕрдиреБрд╡рд╛рдж рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ- "рдЬрд╛рдирдмреВрдЭрдХрд░ рд╕рд╛рдорд╛рдиреНрдп" рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ)ред рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рд╡рд╕реНрддреБ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡рд╣ рдПрдХ рд╕рд░рдгреА рд╣реИред рд╢рд╛рдпрдж .concat
рд╕рдЪ рдореЗрдВ рдирд╣реАрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдРрд╕реЗ рдбрд┐рдЬрд╛рдЗрдиреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ: Array.prototype.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', '+');
# рд╡рд┐рд▓рдВрдмрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди: setTimeout, setInterval, setImmediate
# setTimeout, setInterval
рд╢рд╛рдпрдж рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ setTimeout
рдФрд░ setInterval
ред рдХрдИ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдорд╛рдирдХ ( W3C , WHATWG ) рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпреЗ рдХрд╛рд░реНрдп, рдХреЙрд▓рдмреИрдХ рдФрд░ рд╡рд┐рд▓рдВрдм рд╕рдордп рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреЙрд▓рдмреИрдХ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╕рдорд╕реНрдпрд╛ IE рдореЗрдВ рд╣реИред IE9- рдореЗрдВ setTimeout
рдФрд░ setInterval
рдХреЗрд╡рд▓ 2 рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ, рдпрд╣ рдХрдИ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдПрдХ рдЖрд╡рд░рдг рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
# рд╕реЗрдЯрд┐рдорд┐рдЯреЗрдб
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХрд▓-рдкрд┐рд░реЛрдпрд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рдпрд╣ рдмрд╣реБрдд рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХреЛрдИ рднреА рд▓рдВрдмреА рднрд╛рд░реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░ рджреЗрдЧреА, рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧреАред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд▓реНрдХреЗ рдЙрдк-рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рднрд╛рд░реА рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рднрд╛рдЬрди, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рдЬрдЧрд╣ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ, рдмрдЪрд╛рддрд╛ рд╣реИредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рдЕрднреА рддрдХ) рдореЗрдВ рдкреВрдВрдЫ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЕрдиреБрдХреВрд▓рд┐рдд рдирд╣реАрдВ рд╣реИред рдЬрдм рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА 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редрдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡реА рд╕реНрдердЧрд┐рдд рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЕрдзрд┐рдХрддрдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреЙрд▓реАрдлрд┐рд▓ рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди)ред рдпрд╣ рд╣реИ:- Node.js рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП -
process.nextTick
- рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП -
postMessage
- WebWorkers рдХреЗ рд▓рд┐рдП -
MessageChannel
- IE8 рдХреЗ рд▓рд┐рдП -
script.onreadystatechange
- рдФрд░ рдЕрдЧрд░ рдЗрди рддрд░реАрдХреЛрдВ рдиреЗ рдорджрдж рдирд╣реАрдВ рдХреА -
setTimeout
рдиреНрдпреВрдирддрдо рджреЗрд░реА рдХреЗ рд╕рд╛рде
setImmediate(function(arg1, arg2){ console.log(arg1, arg2);
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ setImmediate
, рдЗрд╕рдХрд╛ рддреЗрдЬ рд╡рд┐рдХрд▓реНрдк рд╣реИ - рдЕрд╡рдзрд╛рд░рдгрд╛ asap
(рдЬрд┐рддрдиреА рдЬрд▓реНрджреА рд╣реЛ рд╕рдХреЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдп ) - рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ, рддреЛ рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдмрдирд╛рдПрдВ, рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕реА рд╡реИрд╢реНрд╡рд┐рдХ рдкрджреНрдзрддрд┐ рдХреЛ рднрд╛рд╖рд╛ рдХреЗ рдорд╛рдирдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ tc39 рдореЗрдВ рд╕реЛрдЪреЗрдВ ред рд╢рд╛рдпрдж рдЗрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?# рд╕рд╛рдВрддреНрд╡рдирд╛
рдХрдВрд╕реЛрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдореЗрдВ рдПрдХрдорд╛рддреНрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдЯреВрд▓ рд╣реИред рдЗрд╕реА рд╕рдордп, рдХрдВрд╕реЛрд▓ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдирдХреАрдХреГрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд╣рд╛рдБ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд░реВрдкрд░реЗрдЦрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рд╣реИрдВ , рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред# IE7 рдореЗрдВ, рдХрдВрд╕реЛрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд╛рдпрдм рд╣реИред рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд▓рд┐рдП, "рд╣рд╛рдЗрдЬреЗрдирдмрд░реНрдЧ рдХрдВрд╕реЛрд▓" рдХреЛconsole
рдХреЗрд╡рд▓ рддрднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдлрд╛рдпрд░рдмрдЧ рд▓рд╛рдЗрдЯ рдХреА рд╢реИрд▓реА рдореЗрдВ рдЕрдкрдиреЗ рдХрдВрд╕реЛрд▓ рдХрд╛рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдмрд╕ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдЖрдк рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред
# рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдФрд░ рдХреНрд░реЛрдорд┐рдпрдо рдореЗрдВ, рдХрдВрд╕реЛрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд╕рдВрджрд░реНрдн рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПconsole
, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдмрд╛рдВрдзрдирд╛ рд╣реЛрдЧрд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, #console.log.bind(console)
ред IE рдореЗрдВ, Firebug, рдФрд░ Node.js, рдЖрдк рдмрд┐рдирд╛ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдмрд╛рдВрдзреЗрдВрдЧреЗconsole
ред
рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░, рдХрдВрд╕реЛрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдЬрд┐рд╕ рд▓рд╛рдЗрди рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рд╡рд╣ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЬрдм рд╕рд╛рдВрддреНрд╡рдирд╛ рдЕрдзрд┐рднрд╛рд╡реА, рдЗрд╕ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдПрдХ рд▓рд╛рдЗрди рд╣реЛ рдЬрд╛рдПрдЧрд╛ 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'); }
# рд▓реЗрдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд░реНрдЧреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдкред рдСрдкрд░реЗрдЯрд░instanceof
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВFunction.prototype
, рддреЛ рдпрд╣ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рд╕рдВрдкрддреНрддрд┐constructor
рдХреБрдЫ рднреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рдиconstructor.name
рди рдХреЗрд╡рд▓ рдпрд╣ рдХреЛрдб рд╕рдВрдкреАрдбрд╝рди рдореЗрдВ рд╕рднреА рдЕрд░реНрде рдЦреЛ рджреЗрддрд╛ рд╣реИ, IE рдЕрднреА рддрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ[[Class]]
ред рдЗрд╕реЗ рдлрд╛рдбрд╝рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рдбрд░рд╛рд╡рдирд╛ рдбрд┐рдЬрд╛рдЗрди рд╣реИ рдЬреЛ рдХрдИ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИObject.prototype.toString.call(foo).slice(8, -1)
ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : Object.prototype.toString.call(1).slice(8, -1);
рдЖрдВрддрд░рд┐рдХ рд╕реНрд╡рд╛рдЧрдд рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╕рдмрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд╣рддреЗ рд╣реИрдВ #Array.isArray
: Object.is рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдЪреАрдиреА рдХреЗ рд▓рд┐рдП , _.is рдкреНрд░рдХрд╛рд░ рдореЗрдВ Undescore рдЖрджрд┐рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ - рдбреЗрдЯрд╛ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ Object.classof
рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╡рд┐рдзрд┐ , рд▓рд╛рдЗрд╡рд╕реНрдХреНрд░рд┐рдкреНрдЯ ( рдЙрджрд╛рд╣рд░рдг ) typeof!
рд╕реЗ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдорд╛рди ред рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:Object.prototype.toString.call(foo).slice(8, -1)
- рдкреБрд░рд╛рдиреЗ IE рдореЗрдВ, рдпрд╣ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ
null, undefined
рдФрд░ arguments
рдпрд╣ рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ "Object"
ред рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде рдЗрд▓рд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред - ECMAScript 6, ?
"Object"
. Object#toString
ECMAScript 6.
рдЕрдЪрд╛рдирдХ, ECMAScript 6 рдореЗрдВ рдЖрдо рддреМрд░ рдкрд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдРрд╕реА рдЖрдВрддрд░рд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЕрднрд╛рд╡ рд╣реЛрддрд╛ рд╣реИ [[Class]]
ред Object#toString
ES6, рд╡рд┐рд╢реЗрд╖ рдЖрдВрддрд░рд┐рдХ рдЧреБрдгреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЪрд░ 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);
# рд╢рдмреНрджрдХреЛрд╢
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рд╢рдмреНрджрдХреЛрд╢ (рд╕рд╛рд╣рдЪрд░реНрдп рд╕рд░рдгрд┐рдпрд╛рдБ) рдПрдХ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдЕрднрд┐рдпреЛрдЧ рд╣реИрдВ - рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рд╡реНрдпрд░реНрде рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдкреНрд░рд╛рд░реВрдк рдмрд╣реБрдд рдЖрдо рд╣реИ 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(''));
рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, in
рдЗрд╕реА рддрд░рд╣ рдЗрд╕рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП in
рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВ / рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдЬреЛ hasOwnProperty
рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдмрд┐рдирд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗред рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ :
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдЧрдВрднреАрд░ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдпрд╣ "рдЯреЗрд▓реАрдлреЛрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛" рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл рд╣реИред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ hasOwnProperty
рд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЕрдЫреВрддрд╛ рд╣реИред рд╣рдореЗрдВ рд╕рднреА рдХреЗ рд▓рд┐рдП рдмреЛрдЭрд┐рд▓ рдЬрд╛рдВрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓рдЧрднрдЧ рдЗрддрдирд╛ рд╣реА рдХрдЪрд░рд╛ :
рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рддреНрдпрд╛рдкрди рдСрдкрд░реЗрдЯрд░ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рдЕрдкрдиреА рд╣реИ, рдЙрд╕реА рдХреЗ рд╕рдорд╛рди рд╣реИ in
редрдХреНрдпрд╛ рдЖрдкрдиреЗ рддрдп рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЦрддреНрдо рд╣реЛ рдЧрдИ рд╣реИрдВ? рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ : phone.set('__proto__', '+7666666');
рдЗрд╕рдореЗрдВ Object.prototype
"рдореИрдЬрд┐рдХ" рдЧреЗрдЯреНрдЯрд░ / рд╕реЗрдЯрд░ рднреА рд╣реИ __proto__
, рдЗрд╕ рдХреБрдВрдЬреА рдкрд░ рдЖрджрд┐рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЧреБрдгреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд░рд╛рдиреЗ рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ рдЕрдиреНрдп "рдЬрд╛рджреВ" рдЧреБрдг рдереЗред рдХреЗрд╡рд▓ Object.defineProperty
( рд╕реИрдВрдбрдмреЙрдХреНрд╕рд░ ) рдпрд╣рд╛рдВ рдорджрдж рдХрд░реЗрдЧрд╛ :
рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╢рдмреНрджрдХреЛрд╢ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ - рдпрджрд┐ рд╕рдм рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИ, рддреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдЧреБрдг рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░реИрд╡рд░реНрд╕ рдХрд░рддреЗ рд╣реБрдП, 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
ред рдпрд╣ рд╣рдореЗрдВ рдХреИрд╕реЗ рдзрдордХреА рджреЗрддрд╛ рд╣реИ?
- рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
+Object.create(null)
, рдпрд╛ рдПрдХ рддрд╛рд░ рдХреЗ рд▓рд┐рдП рдирдВрдмрд░ рджреЗрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ , '' + Object.create(null)
-TypeError
- рддрджрдиреБрд╕рд╛рд░, рд╡рд╕реНрддреБ рдХреА рддреБрд▓рдирд╛ рдПрдХ рд╕рдорд╛рдирддрд╛ рд╕рдорд╛рдирддрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
==
, рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде -TypeError
рдЬреИрд╕реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдорд╛рдЗрдирд╕ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдПрдХ рдкреНрд▓рд╕ рд╣реИред# рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░Dict
рддреЛ, рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ Object.create(null)
рдФрд░ рдЗрд╕реЗ рднрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рд╣реИ {}
ред рдмреЗрд╢рдХ, рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд╢рд╛рдмреНрджрд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ , рд▓реЗрдХрд┐рди рдпрд╣, рдХрдо рд╕реЗ рдХрдо рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ, рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рд╢рд╛рдмреНрджрд┐рдХ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИ {__proto__: null, foo: 'bar'}
, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рд╕рдордп рдпрд╣ рдХреЛрдб рдХреЛ рдЕрдкрдирд╛рдиреЗ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ , рдФрд░ рдпрд╣ рдЕрднреА рднреА рдмреЛрдЭрд┐рд▓ рд╣реИред рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдирд┐рд░реНрдгрдпрдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ - рдПрдХ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ "рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПDict
Object.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; }
# рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рдо рдХреЗ рддрд░реАрдХреЗ
рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЕрднреА рднреА рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рддрд╣рдд рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде, рд╣рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред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'));
# рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ
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);
# рддрд░реАрдХреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд▓рд┐рдП, # рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП ,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));
# рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ
рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде # рдХреЗ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); };
рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЧрд╛?new Dict instanceof Dict
редfor(var [key, value] of dict){...}, new Map(dict)
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ Dict.entries
ред- #
Object.classof(new Dict)
рд▓реМрдЯреЗрдВрдЧреЗ 'Dict'
, рдирд╣реАрдВ 'Object'
ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд╛рд░рдг рд╣реИрдВ, рдХрдо рд╕реЗ рдХрдо, 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();
рдмрд╛рдзреНрдпрдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ this
- Function#part
( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ): Array.prototype.compact = [].filter.part(function(val){ return val != null; }); [0, null, 1, undefined, 2].compact();
# рдордирдорд╛рдиреА рддрд░реНрдХреЛрдВ рдХрд╛ рдЖрдВрд╢рд┐рдХ рдЙрдкрдпреЛрдЧ
рдЕрдХреНрд╕рд░ рдЬрдм рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдордирдорд╛рдиреА рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдкрд╣рд▓реЗ 2, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджреВрд╕рд░реЗ рдФрд░ рдЪреМрдереЗ рдпрд╛ рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗред рдпрд╣рд╛рдБ Function#bind
рд╡рд╣ рд╣рдорд╛рд░реА рдорджрдж рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧреА - рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдПрдХ рдЖрд╡рд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред function fn1(a, c){ console.log(a, 2, c, 4); }; fn1(1, 3);
рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛ рдЙрд╕ рддрд░реНрдХ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд░рд╣рд╛ рд╣реИ _
(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрд╡рд╕реНрдХреНрд░рд┐рдкреНрдЯ , рдПрдХ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ ), рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╡реЗрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ред рдЬреЗрдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ (рд╡реИрд╕реЗ, рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рднреА рд╣реИ _.partial
) рдФрд░ LoDash рдХреЛ рдЗрд╕рдХреЗ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо _
рдХреЗрд╡рд▓ рдПрдХ рдирдИ рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ _
, рдЪрд╛рд╣реЗ рд╡рд╣ рдХреБрдЫ рднреА рд╣реЛред рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ core._
ред рдПрдХ рдЙрджрд╛рд╣рд░рдг : var fn1 = console.log.part(_, 2, _, 4); fn1(1, 3);
рд╣рдо рдПрдХ Function#by
рд╕рдорд╛рди рд╡рд┐рдзрд┐ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ Function#bind
, рд▓реЗрдХрд┐рди рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рдеред рдЖрдк рдЗрд╕реЗ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ Function#bind
, рдЖрдкрдХреЛ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реИ, рдФрд░ рдпрд╣ рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдЧрднрдЧ рд╕рднреА рдЗрдВрдЬрдиреЛрдВ рдореЗрдВ рдХрд╛рдлреА рдмреНрд░реЗрдХрд┐рдВрдЧ рд╣реИред var fn = console.log.by(console, _, 2, _, 4); fn(1, 3, 5);
# рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рд╡рд┐рдзрд┐
рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреЙрд▓рдмреИрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЛ рдмрд╛рдВрдзрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рд╣реЛрддреА рд╣реИ - fn(foo.bar.baz.bind(foo.bar))
ред рд╣рдореЗрдВ foo.bar
2 рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдпрд╣ 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'));
рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ, 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);
# рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ
рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ ред рдЗрд╕рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ parseInt
- рдХрд╛рдлреА рдЕрд╕реНрдкрд╖реНрдЯ, рдХреЛрдИ рднреА рдПрдХ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП рддрд╛рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди Number
рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдмрд┐рдВрджреБ рдЙрдирдХреЗ "рдЦрддрд░реЗ" рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрд╡рд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдореЗрдВ рд╣реИредрдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд╛рдВрддреНрд╡рдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд┐рдВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕реНрд╡рдпрдВ рддрддреНрд╡ рдФрд░ рдХреБрдЫ рдирд╣реАрдВ: [1, 2, 3].forEach(console.log);
рд╡рд┐рдзрд┐ .forEach
, рдХрдИ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣, рдХреЙрд▓рдмреИрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рджреЗрддреА рд╣реИ - рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдЦреБрдж рд╕рд░рдгреАред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдирдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрдирд╛ рд╣реЛрдЧрд╛: [1, 2, 3].forEach(function(it){ console.log(it); });
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд▓реЗрдЦ рдореЗрдВ, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреА рдЧрдИ рдереА Function#only
ред рд╣рдо рдЗрд╕рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рддрд░реНрдХ, рддрд░реНрдХреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рд╣реИ, рджреВрд╕рд░рд╛, рд╡реИрдХрд▓реНрдкрд┐рдХ, рд╕рдВрджрд░реНрдн рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг : [1, 2, 3].forEach(console.log.only(1));
рдмреЗрд╢рдХ, рдЕрдЧрд░ рддрд░реНрдХреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ 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 рдирд╡рдВрдмрд░ 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' });
рдпрд╣ рдмреЛрдЭрд┐рд▓ рдЬрд░реВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмреЗрд╣рддрд░ рд╣реИред рдорд╛рдирдХ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЦрд░рд╛рдм рдирд╣реАрдВред рдпрд╣ рдХреНрд░реЛрдо, рдУрдкреЗрд░рд╛, IE11 рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдЖрдкрдХреЛ IE10-, рд╕рдлрд╛рд░реА, рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╢реИрддрд╛рди рдЕрднреА рднреА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рд╣реИ ред рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рдЬрди рд╣реЛрдЧрд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реНрдерд╛рдиреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреЗ рдмрд┐рдирд╛ред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, core.js рдореЗрдВ рдФрд░ рдХреЛрдИ Polyphemus ECMA402 ред# рд╕рд░рд▓ рджрд┐рдирд╛рдВрдХ рд╕реНрд╡рд░реВрдкрдг рдЬреЛрдбрд╝реЗрдВред
рд╕рд░рд▓ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдЖрдкрдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рдкреВрд░реНрдг рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдпрд╛ рдЕрдиреНрдп рдЙрдиреНрдирдд рджрд┐рдирд╛рдВрдХ рдЯреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реВрдВ, рдЖрдорддреМрд░ рдкрд░ рдореИрдВ рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд┐рдерд┐ рдкреНрд░рд╛рд░реВрдкрдг рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдареАрдХ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреЛрдИ рднреА рдореЛрдореЗрдВрдЯ.рдЬреЗрдПрд╕ рдпрд╛ рдкреЙрд▓реАрдлрд┐рд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ Intl
ред рдпрд╣рд╛рдВ, рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдореЙрдбреНрдпреВрд▓ рдХрдИ рджрд╕рд┐рдпреЛрдВ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВредрд╡рд┐рдзрд┐ Date#format
рдФрд░ рдЗрд╕рдХрд╛ UTC рд╕рдВрд╕реНрдХрд░рдг Date#formatUTC
( рд╕реИрдВрдбрдмреЙрдХреНрд╕ ) рдЬреЛрдбрд╝реЗрдВ: new Date().format('W, D MM Y ., h:mm:ss', 'ru');
рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рджрдЧреА рдФрд░ рдкрдардиреАрдпрддрд╛ рдХреА рдЦрд╛рддрд┐рд░, рд╣рдо рд╕рдВрдХреЗрддрди рдХреЛ рдврд╛рд▓рдиреЗ рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЬрдмрдХрд┐ рдЙрдирдХрд╛ рдиреНрдпреВрдирддрдо рдЙрдкрд▓рдмреНрдз рд╣реИ: 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');
рд╕реНрдерд╛рдиреАрдп рдкреНрд░рд╛рд░реВрдк рдиреАрдЪреЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреЛрдб рдореЗрдВ, рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ core.addLocale
, рд▓реЗрдХрд┐рди рджреЗрд╢реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░рдг, рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕реНрдерд╛рдиреАрдп рдореЙрдбреНрдпреВрд▓ рдЗрд╕ рдкрд░ рджрд┐рдЦреЗрдЧрд╛: (typeof core != 'undefined' ? core : require('core-js/library')).addLocale('ru', { weekdays: ',,,,,,', months: ':|,:|,:|,:|,:|,:|,:|,:|,:|,:|,:|,:|' });
рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг : new Date().format('DD.NN.YY');
# рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдкреАрдЖрдИ
# рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ : ECMAScript 5 рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдЖрдк рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рдХреЛ рдХреЗрд╡рд▓Object.defineProperty
/рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВObject.defineProperties
, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдкреВрд░реНрдг рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдк рдЧреИрд░-рдЧрдгрди рдпрд╛ рдкреБрди: рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рдЬреИрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ, рдФрд░ рдпрд╣ рдмреЛрдЭрд┐рд▓ рд╣реИредрд╡рд┐рдзрд┐ # рдХреЗObject.assign
рдЕрд▓рд╛рд╡рд╛, ECMAScript 6 рдореЗрдВ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереАObject.mixin
рдЬреЛ рд╕реНрд░реЛрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рд╡рд┐рд╡рд░рдг рдореЗрдВ рд▓реЗ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдзрд┐ рдХреЛ рдХреАрд╡рд░реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕реНрд░реЛрдд рд╡рд╕реНрддреБ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдирд╛ рдерд╛super
ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рдорд╛рдирдХ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджрд┐рдпрд╛редObject.define
рд╡рд░реНрдгрд┐рдд рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ Object.mixin
- рд╕реНрд░реЛрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рд▓рдХреНрд╖реНрдп рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛, рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛, рд▓реЗрдХрд┐рди super
ECMAScript 5 рдореЗрдВ рдХреАрд╡рд░реНрдб рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдирд╣реАрдВ ред
# рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ : ECMAScript 5 рдореЗрдВ, рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рднреА рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИObject.create
ред рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдкрдиреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рддрд░реНрдХObject.create
, рдЬреИрд╕реЗObject.defineProperties
, рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╡рд░реНрдгрдирдХрд░реНрддрд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдпреБрдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реИредрдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВObject.make
- рдПрдХ рдПрдирд╛рд▓реЙрдЧObject.create
, рджреВрд╕рд░рд╛ рддрд░реНрдХ рдПрдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╡рд╕реНрддреБ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЦрд╛рддреЗ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред
ECMAScript 7 рдореЗрдВ Object.getOwnPropertyDescriptors рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ , рдЬреЛ рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рдЧреБрдгреЛрдВ рдХреЗ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдпреБрдХреНрдд рдСрдмреНрдЬреЗрдХреНрдЯред рдЖрджрд░реНрд╢ рдЬреЛрдбрд╝реА рдХреЛ рдПрдХ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Object.defineProperties
, рдФрд░ Object.create
рдХреБрдЫ рд╣рдж рддрдХ, рд╣рдорд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП, рдФрд░, Object.make
рдФрд░ Object.define
ред рд╡рд╣ рднреА рдмрд╣реБрдд рдмреЛрдЭрд┐рд▓ рд╣реИред# рдЕрд░реНрд░реЗ
# рдПрд░реЗ # рдореЗрдВ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИ(рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрдм рддрдХ -Array#contains
рдПрдХ рдореВрдЯреНрд╕ рдмрдЧ рдХреЗ рдХрд╛рд░рдг рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИ, рдЕрднреА рднреА рдкреБрд░рд╛рдиреЗ рдирд╛рдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ) рдХреЛ ECMAScript 7 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рдпрд╣ рдореМрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рддрддреНрд╡ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддArray#indexOf
, рдпрд╣ # SameValueZero рддреБрд▓рдирд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИрдФрд░ рдЫрд┐рджреНрд░реЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рджреВрд╕рд░рд╛, рд╡реИрдХрд▓реНрдкрд┐рдХ, рддрд░реНрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИред рдЙрджрд╛рд╣рд░рдг : [1, 2, 3].includes(2);
# рд▓реЗрдХрд┐рди рддрд░реАрдХрд╛Array#turn
рдореЗрд░реА рдмреАрдорд╛рд░ рдХрд▓реНрдкрдирд╛ рдХрд╛ рдлрд▓ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЕрджреНрд╡рд┐рддреАрдп рдирд╣реАрдВ рд╣реИ - рдпрд╣ LoDash_.transform
рд╕реЗрдПрдХ рд╕рдорд╛рди рд╡рд┐рдзрд┐рд╣реИред рдпрд╣рдХреЙрд▓рдмреИрдХ рд╕реЗ рдмреИрдЯрд░реА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдмреИрдЯрд░реА рдСрдмреНрдЬреЗрдХреНрдЯ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрдХ рдирдпрд╛ рд╕рд░рдгреА) рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдХреЛ рдореЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдПрд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рд╡рд┐рдзрд┐ рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рдорд╛рди рд╣реИрдВред рдЖрдк рдХреЙрд▓рдмреИрдХ рд╕реЗ рд▓реМрдЯрдХрд░ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг :Array#reduce
Array#reduce
false
# рдирдВрдмрд░
# рдпрд╛рдж рд░рдЦреЗрдВ # рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдЕрдзреНрдпрд╛рдп рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг ? рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдордирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдЕрд╡рд╕рд░ред рдмрд╣реБрдд рд╣реА рдХрдо рдЪрдХреНрд░, рд╕рдордп рдХреА рдПрдХ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░for-of
рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджрд┐рдпрд╛ рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд░рд▓ рдкреАрдврд╝реА #Array.from
(рдФрд░ рд╢рд╛рдпрдж # рдкреНрд░рд╕рд╛рд░ ), рдЖрджрд┐ рддреЛ рдЪрд▓реЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджрд┐рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд╣реАрдВред рдЙрджрд╛рд╣рд░рдг :
# рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпNumber.prototype
- рд╕реБрдЦрдж рдЪреАрдЬреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рд╕реЗред рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ рд╕реБрдЧрд░ рдФрд░ рдореВрдЯреНрд╕ рдореЗрдВ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯMath
рдореЗрдВрд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗNumber.prototype
ред рдпрд╣рд╛рдВ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ - рд╕рдВрджрд░реНрдн рдЧрдгрд┐рддреАрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реНрдХ рдмрди рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдореМрдЬреВрджрд╛, рдорд╛рдирдХреАрдХреГрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ :)рд╣рдо рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВNumber#random
ред рдпрд╣ рд╕рдВрджрд░реНрдн рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХ рдХреЗ рдмреАрдЪ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 0 рд╣реИ)редрдЙрджрд╛рд╣рд░рдг : 3..pow(3);
# рд╡рд┐рд╢реЗрд╖ рдкрд╛рддреНрд░реЛрдВ рд╕реЗ рдмрдЪрдирд╛
# рдпрджрд┐ рдореИрдВ рдЕрдЪрд╛рдирдХ, рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ HTML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдорд╣рд╛рди рд░рд╣рд╕реНрдп рдирд╣реАрдВ рдЦреЛрд▓рд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ HTML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ рдврд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдпрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджрд┐рдо рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдЦреАрдВрдЪрдирд╛ рдЙрдЪрд┐рдд рд╣реИ? HTML рднрд╛рдЧрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕рднреА рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рд╣реИрдВред рдЪреАрдиреА, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ, MooTools рддрд░реАрдХреЗ рд╣реИрдВescapeHTML
рдФрд░unescapeHTML
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд▓рд╛рдЗрдиред рдЖрдЗрдП рдЗрд╕ рдкрд░рдВрдкрд░рд╛ рдХреЛ рди рддреЛрдбрд╝реЗрдВ: '<script>doSomething();</script>'.escapeHTML();
# рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕рд╣реА / рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рднреА рдврд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реБрдЧрд░, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рдореВрдУрдЯрд▓реНрд╕, рдХрд╣реАрдВ рд╕реНрдЯреИрдЯрд┐рдХ рдореЗрдердбRegExp
, рдХрд╣реАрдВ рдореЗрдердб рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВString.prototype
ред рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рдзрд┐ рдХреЛ ECMAScript рдореЗрдВ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдордЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ: RegExp.escape(' -[]{}()*+?.,\\^$|');
# рдирд┐рд╖реНрдХрд░реНрд╖
рдЦреИрд░, рдРрд╕рд╛ рд╣реА рдХреБрдЫред
рдореИрдВ рдорд╛рдирдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗ-рдорд╛рдиреЗ xkcd рдЪрд┐рддреНрд░ рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рджрд┐рдЦрд╛рд╡реЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рджреЗрдЦрддрд╛, рд╕рд┐рд╡рд╛рдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХ рдЬреЛрдбрд╝реЗ рд╕реЗ рд╣реЙрдЬрдкреЙрдЯ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реИрдХрдбрд╝реЛрдВ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдХрд╛ рд╡рдЬрдиредрдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреА рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд▓реЗрдЦ рдХреЗ рдкреВрд░реЗ рдкрд╛рда рдореЗрдВ рдмрд┐рдЦрд░реЗ рд╣реБрдП рд╣реИрдВред рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрднреА рддрдХ рдЗрд╕рд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реБрдЖ рд╣реВрдВредрдЖрдкрдХреА рд░рд╛рдп рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдпрд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдФрд░ рдХреНрдпрд╛ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╣рд╛рдВред рдФрд░ рдлрд┐рд░ рднреА, рдЬрдм рд╕реЗ рдореИрдВ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдкреАрдбрд╝рд┐рдд рд╣реЛрдиреЗ рд▓рдЧрд╛ - рдореИрдВ рдКрдм рдЧрдпрд╛ рд╣реВрдВред рдореИрдВ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡реЗрддрди рдХреЗ рд╕рд╛рде рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред