
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ theString рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ "рдирд┐рд╣рд┐рдд" рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВ js рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ рдмрд╛рд╣рд░реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЗ рдмреАрдЪ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рдХрдИ рдЪреБрдЯрдХреБрд▓реЛрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдФрд░ рдХрдИ рд╕рдВрджрд┐рдЧреНрдз рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдЬреЛ рд╕реНрддреВрдк рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ [рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ] ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╢рд╛рдпрдж, рдЬрдм рдХреЗрд╡рд▓ рдлреНрд▓реЛрдЯ64 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрддрд╛ рд╣реИред
рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓реЗ рдЬреЛ рдореБрдЭреЗ рджреЗрдЦрдиреЗ, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЗ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рдмреНрд░реАрдлрд┐рдВрдЧ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рд╣рдо рднрд╛рд╖рд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрд░ рд╕рд░рдкрдЯ рднрд╛рдЧ рд▓реЗрдВрдЧреЗ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реНрдЯрд░реНрд▓рд┐рдВрдЧ рдХреА рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧреА рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рди рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ , рдпрд╣, рдФрд░ рд╡рд╣ рд╕рд╛рдордЧреНрд░реА рдЖрдкрдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИред рдпрджрд┐ рдЖрдкрдХреА рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдЕрднреА рднреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХрддрд╛ рдкрд░ рд╣рд╛рд╡реА рд╣реИ, рддреЛ рдХреГрдкрдпрд╛, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗред
рдмрд╕ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
TheString рдлрд╝рдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЗрд╕рдХреА рд╡рд┐рдзрд┐ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рдЖрджрд┐рдо рдореВрд▓реНрдп рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднреА рд╣реИрдВ: рдлрд╝рдВрдХреНрд╢рди, рдПрд░реЗ, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдмреВрд▓рд┐рдпрди, рд╕рдВрдЦреНрдпрд╛, рдкреНрд░рддреАрдХ, рджрд┐рдирд╛рдВрдХ, RegExp, рддреНрд░реБрдЯрд┐ ред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ (рдХреНрд▓рд╛рд╕) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдВрдЧ рдПрдХ рдЕрдЪреНрдЫрд╛ рд░реВрдк рд╣реЛрдЧрд╛ред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдХрдордЬреЛрд░ рдкреНрд░рдгрд╛рд▓реА рд╡рд╛рд▓реА рднрд╛рд╖рд╛ рд╣реИ: рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╣рд┐рдд рдХрд░рддреА рд╣реИред рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЖрджрд┐рдо рдХреА рд╡рд╕реНрддреБ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП toString рдХреЛ valueOf рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдСрдкрд░реЗрдЯрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкрдВрдХреНрддрд┐ рд╣реИ, рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрдЯрд░ рд╕рдВрдШрдирди рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдХреЗ рдХрд╛рд░реНрдп рд╕реЗ рдкрд╣рд▓реЗ рднрд╛рд╖рд╛ рдХреЗ рдХреБрдЫ рдорд╛рдирдХ рдХрд╛рд░реНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВ: parseInt, decodeURI, JSON.parse, btoa рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрд╣рд╛рд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдореБрдЦреНрдп рднрд╛рд╖рд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред
Object.prototype.toString
рдпрджрд┐ рд╣рдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЦрдВрдб рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рддрдерд╛рдХрдерд┐рдд рдЯреИрдЧ рдХреЛ рдкрд░рд┐рдгрд╛рдореА рд╕реНрдЯреНрд░рд┐рдВрдЧ рддрдХ рдкрд╣реБрдВрдЪрд╛рдирд╛ рд╣реИ:
"[object " + tag + "]"
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
- рдЖрдВрддрд░рд┐рдХ toStringTag рдкреНрд░рддреАрдХ (рдпрд╛ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЫрджреНрдо рд╕рдВрдкрддреНрддрд┐ [[рд╡рд░реНрдЧ]] ) рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реЛрддрд╛ рд╣реИ: рдЗрд╕рдореЗрдВ рдХрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ ( рдорд╛рдирдЪрд┐рддреНрд░, рдЧрдгрд┐рдд, JSON рдФрд░ рдЕрдиреНрдп) рд╣реИрдВред
- рдпрджрд┐ рдХреЛрдИ рдЧрд╛рдпрдм рд╣реИ рдпрд╛ рдХреЛрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХрдИ рдЕрдиреНрдп рдЖрдВрддрд░рд┐рдХ рдЫрджреНрдо рдЧреБрдгреЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ : [[рдХреЙрд▓]] рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП , [[DateValue]] рдбреЗрдЯ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
- рдЦреИрд░, рдЕрдЧрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЯреИрдЧ "рдСрдмреНрдЬреЗрдХреНрдЯ" рд╣реИ ред
рдЬреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рд╡реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рддреБрд░рдВрдд рдиреЛрдЯ рдХрд░реЗрдВрдЧреЗ (рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡ рд╣реИ):
const getObjT = obj => Object.prototype.toString.call(obj).match(/\[object\s(\w+)]/)[1];
рдбрд┐рдлрд╝реЙрд▓реНрдЯ toString рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рдЖрджрд┐рдо рд╣реИ, рддреЛ рдЗрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ( рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрд▓рдЧ рд╕реЗ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ)ред рдХреЛрдИ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ:
[Infinity, null, x => 1, new Date, function*(){}].map(getObjT); > ["Number", "Null", "Function", "Date", "GeneratorFunction"]
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрддрд┐рд╢реАрд▓ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордпред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪрд░ рдХрд╛ рдПрдХ рдЧрд░реНрднрд╡рддреА рдкреВрд▓ рд╣реЛрдиреЗ рдкрд░, рдЖрдк рд░рди-рдЯрд╛рдЗрдо рдкрд░ рдЙрдкрдпреЛрдЧреА рд╕рдЬрд╛рддреАрдп рдЖрдВрдХрдбрд╝реЗ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЦрд╛рдореА рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд┐рд░реНрдл "рдСрдмреНрдЬреЗрдХреНрдЯ" рдорд┐рд▓рддрд╛ рд╣реИред
рдХрд╕реНрдЯрдо Symbol.toStringTag рдФрд░ Function.name
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ OOP рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ (рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ) рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреИрдпрд╛рд░ рдЧреЗрдЯрдХреНрд▓рд╛рд╕ () рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП toStringTag рд╡рд░реНрдг рдХреА рдПрдХ рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА:
class Cat { get [Symbol.toStringTag]() { return 'Cat'; } }
рдпрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реИрд▓реА рдореЗрдВ:
function Dog(){} Dog.prototype[Symbol.toStringTag] = 'Dog';
рд░реАрдб-рдУрдирд▓реА рдкреНрд░реЙрдкрд░реНрдЯреА Function.name рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреЛ рдЕрднреА рддрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ / рдХреНрд▓рд╛рд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рддреЛ рд╣рдо рдЯрд╛рдЗрдк рдХрд╛ рдирд╛рдо рдкрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
class Cat {} (new Cat).constructor.name < 'Cat'
рдпрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реИрд▓реА рдореЗрдВ:
function Dog() {} (new Dog).constructor.name < 'Dog'
рдмреЗрд╢рдХ, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди ( "рдЕрдирд╛рдо" ) рдпрд╛ Object.create (рдирд▓) рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рдЖрд╡рд░рдг рд╡рд╕реНрддреБ ( рдЕрд╢рдХреНрдд, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд ) рдХреЗ рдмрд┐рдирд╛ рдЖрджрд┐рдо рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЪрд░ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЗрд░рдлреЗрд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░рд╕рд┐рджреНрдз рддрдХрдиреАрдХреЛрдВ рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣рд╛рде рдореЗрдВ рдХрд╛рдо рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЯрд╛рдЗрдкреЛрдлрд╝ рдФрд░ рдЗрдВрд╕реНрдЯреЛрдлрд╝ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред
Function.prototype.toString
рд╣рдо рдереЛрдбрд╝реЗ рд╡рд┐рдЪрд▓рд┐рдд рдереЗ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдорд┐рд▓реЗ рдЬреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
(function() { console.log('(' + arguments.callee.toString() + ')()'); })()
рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рд╢рд╛рдпрдж рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдХреНрд╡реАрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрджрд┐ рдЖрдк рдкреГрд╖реНрда рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдРрд╕реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдПрдХ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдпрд╣ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реИ рддрд░реНрдХреЛрдВ рд╕реЗред рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдиред
рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ toString рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: FunctionDeclaration, FunctionExpression, ClassDeclaration, ArrowFunction , рдЖрджрд┐ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдПрд░реЛ рдлрдВрдХреНрд╢рди рд╣реИ:
const bind = (f, ctx) => function() { return f.apply(ctx, arguments); }
рдХреЙрд▓рд┐рдВрдЧ bind.toString () рд╣рдореЗрдВ ArrowFunction рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд▓реМрдЯрд╛рдПрдЧрд╛ :
"(f, ctx) => function() { return f.apply(ctx, arguments); }"
рдФрд░ рдПрдХ рд▓рдкреЗрдЯреЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА FunctionExpression рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ:
"function() { return f.apply(ctx, arguments); }"
рдпрд╣ рдмрд╛рдЗрдВрдб рдЙрджрд╛рд╣рд░рдг рдЖрдХрд╕реНрдорд┐рдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрджрд░реНрдн рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдлрдВрдХреНрд╢рди .prototype.bind рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рд╣реИ , рдФрд░ рджреЗрд╢реА рдмрд╛рдЙрдВрдб рдлрдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ , рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Function.prototype.toString рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд▓рд┐рдкрдЯреЗ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд▓рдХреНрд╖реНрдп рдлрд╝рдВрдХреНрд╢рди рджреЛрдиреЛрдВ рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред V8 рдФрд░ рд╕реНрдкрд╛рдЗрдбрд░рдореЛрдВрдХреА рдХреНрд░реЛрдо рдФрд░ рдПрдлрдПрдл рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг:
function getx() { return this.x; } getx.bind({ x: 1 }).toString() < "function () { [native code] }"
рдЗрд╕рд▓рд┐рдП, рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рджреЗрд╢реА-рд╕рдЬрд╛рдпрд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╛рдпрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
F.toString рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ
рдкреНрд░рд╢реНрди рдореЗрдВ .String рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЯреВрд▓ рдпрд╛ рдбреАрдмрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд░реВрд░реА рд╣реИред рд╡реНрдпрд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛрдиреЗ рд╕реЗ рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рдПрдХ рдЕрд╕рдорд░реНрдерд┐рдд рдЯреВрдЯреА рд╣реБрдИ рдЧрд░реНрдд рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдмрд╕реЗ рд╕рд░рд▓ рдмрд╛рдд рдЬреЛ рдорди рдореЗрдВ рдЖрддреА рд╣реИ , рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдХреА рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ :
f.toString().replace(/\s+/g, ' ').length
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЦрд░реАрдж рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреЛрд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕реНрдерд╛рди рдФрд░ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреА рдЧрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕реНрд╡рдЪреНрдЫрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рджреГрд╢реНрдп рд╣реЛрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЧреЗрдХреЛ рдЗрдВрдЬрди рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдерд╛ рдЬреЛ рдЗрдВрдбреЗрдВрдЯ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдореЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рддреБрд░рдВрдд рдзреНрдпрд╛рди рдореЗрдВ рдЖрддреА рд╣реИ, рдЬреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдореЗрдВ рдЖ рд╕рдХрддреА рд╣реИ:
f.toString().match(/^function(?:\s+\w+)?\s*\(([^\)]+)/m)[1].split(/\s*,\s*/)
рдпрд╣ рдШреБрдЯрдиреЗ рдХрд╛ рд╕рдорд╛рдзрд╛рди FunctionDeclaration рдФрд░ FunctionExpression рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдФрд░ рд╕рдЯреАрдХ рдПрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдШреЛрд╖рд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╣реБрдб рдХреЗ рддрд╣рдд рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рд╣реИред
Eval рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрддрд░рдирд╛рдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк:
const sum = (a, b) => a + b; const prod = eval(sum.toString().replace(/\+(?=\s*(?:a|b))/gm, '*')); sum(5, 10) < 15 prod(5, 10) < 50
рдореВрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬрд╛рдирддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЗрд╕рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХреЗ рд╕рд╛рде рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓рдХрд░ рдПрдХ рдирдпрд╛ рдмрдирд╛рдпрд╛ред рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░-рдЬрдирд░реЗрдЯреЗрдб рдХреЛрдб рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдХрдореА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдЧрдгрд┐рддреАрдп рдореЙрдбрд▓ рдкрд░ рд╢реЛрдз рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЪрдпрди рдХрд░рдирд╛, рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ред
рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╕рдВрдХрд▓рди рдФрд░ рд╡рд┐рддрд░рдг рд╣реИ ред рдХрдИ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдбреЗрдЯрд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрддрд┐рдо HTML (рдпрд╛ рдЕрдиреНрдп) рдмрдирд╛рддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд _.template рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
const helloJst = "Hello, <%= user %>" _.template(helloJst)({ user: 'admin' }) < "Hello, admin"
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдмрд╣реБрдд рдкрддрд▓рд╛ рд╣реЛ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЯреЗрдХреНрд╕реНрдЯ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рдорд╛рдкреНрдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
const helloStr = _.template(helloJst).toString() helloStr < "function(obj) { obj || (obj = {}); var __t, __p = ''; with (obj) { __p += 'Hello, ' + ((__t = ( user )) == null ? '' : __t); } return __p }"
рдЕрдм рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕рдВрдХрд▓рди рдореЗрдВ рдлрдВрдХреНрд╢рдирдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рд╡рдЬрд╣ рд╕реЗ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдПрдЕрд░рд░ рдирд╣реАрдВ рдерд╛:
const helloFn = eval(helloStr.replace(/^function\(obj\)/, 'obj=>'));
рдпрд╛ рддреЛ:
const helloFn = eval(`const f = ${helloStr};f`);
рдпрд╛ рдЬреИрд╕рд╛ рдЖрдкрдХреЛ рдЬреНрдпрд╛рджрд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ:
helloFn({ user: 'admin' }) < "Hello, admin"
рдпрд╣ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рд╕рдВрдХрд▓рди рдФрд░ рдЖрдЧреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдлрдВрдХреНрд╢рди.рдкреНрд░реЛрдЯрд╛рдЗрдк.рдЯреЛрд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдИрд╡реИрд▓ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рдЕрдВрдд рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреБрд░рд╛рдирд╛ рдХрд╛рд░реНрдп ( рдлрдВрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗред рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ) рд╕реНрдЯреНрд░реАрдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ:
f.toString().match(/function\s+(\w+)(?=\s*\()/m)[1]
рдмреЗрд╢рдХ, рдпрд╣ FunctionDeclaration рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЪрд╛рд▓рд╛рдХ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЪрд╛рд▓рд╛рдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдпрд╛ рдкреИрдЯрд░реНрди рдорд┐рд▓рд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЗрдВрдЯрд░рдиреЗрдЯ Function.prototype.toString рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рдиреЛрдВ рд╕реЗ рднрд░рд╛ рд╣реИ, рдмрд╕ рдкреВрдЫреЗрдВред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ: рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкред
Array.prototype.toString
рдПрдХ рдРрд░реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд╕реНрддреБ рдХреЗ рд╕реНрдЯреНрд░реЛрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдЬреЙрдЗрди рд╡рд┐рдзрд┐ рд╣реИ, рддреЛ String рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕рдХреА рдХреЙрд▓ рд╣реЛрдЧреА, рдЕрдиреНрдпрдерд╛, Object.prototyp.toString ред
рдРрд░реЗ , рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рд╕рдореНрдорд┐рд▓рд┐рдд рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рд╣реИ)ред
рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдЖрджрд┐рдо рд╣реИрдВ, рддреЛ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо JSON.stringify рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
function seria() { return Array.from(arguments).toString(); }
рдпрд╛ рддреЛ:
const seria = (...a) => a.toString();
рдмрд╕ рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ '10' рдФрд░ рдирдВрдмрд░ 10 рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЪрд░рдг рдореЗрдВ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдЬреНрдЮрд╛рдкрди рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХрд╛ рдореВрд▓ рдЬреБрдбрд╝рд╛рд╡ 0 рд╕реЗ рд▓рдВрдмрд╛рдИ рддрдХ рдПрдХ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЪрдХреНрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рд╛рдкрддрд╛ рддрддреНрд╡реЛрдВ ( рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд ) рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд╕рд╛рде рд╕рдВрдШрдирди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:
const ar = new Array(1000); ar.toString() < ",,,...,,,"
рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рдХрд╛рд░рдг рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдЙрддреНрдкрдиреНрди рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЖрдИрдбреА рд╣реИ), рддреЛ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рд╣реЛрдВ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреИрдпрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдиреЗрддреГрддреНрд╡ рди рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЕрдорд╛рдиреНрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдВрдмрд╛рдИ, рд╕реНрдореГрддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдпрд╛ рдмрд╕ рдПрдХ рдЭреВрд▓рдиреЗ рд╡рд╛рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдСрдмреНрдЬреЗрдХреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд╛рдиреЛрдВ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрд╡рдпрдВ рдкреНрд░рдЧрдгрд┐рдд рдЧреБрдгреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВ:
const k = []; k[2**10] = 1; k[2**20] = 2; k[2**30] = 3; Object.values(k).toString() < "1,2,3" Object.keys(k).toString() < "1024,1048576,1073741824"
рд▓реЗрдХрд┐рди рд╕рд░рдгреА рдХреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ: рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдХреЛ рднрдВрдбрд╛рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЯ рдХрд░реЗрдЧрд╛ред
рд╡реИрд╕реЗ, JSON.stringify рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╣реА рдЦрддрд░рд╛ рдореМрдЬреВрдж рд╣реИред рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░, рдЪреВрдВрдХрд┐ рдЦрд╛рд▓реА рдФрд░ рдЕрд╕рдорд░реНрдерд┐рдд рддрддреНрд╡ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рд╢реВрдиреНрдп" рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ:
const ar = new Array(1000); JSON.stringify(ar); < "[null,null,null,...,null,null,null]" // 1000 times
рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЬреЙрдЗрди рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ Array.prototype.toString.call рдХреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд▓рд╛рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рд╣реИред
Number.prototype.toString рдФрд░ parseInt
Js quizzes рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╕рдВрджреАрджрд╛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЕрдЧрд▓реЗ рдкрд╛рд░реНрд╕реЗрдЗрдВрдЯ рдХреЙрд▓ рдХреЛ рдХреНрдпрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛?
parseInt(10**30, 2)
рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рдкрд╛рд░реНрд╕рдЗрдВрдЯ рдХрд░рддреА рд╣реИ, рд╡рд╣ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд┐ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд╛рдВрдЫрд┐рдд рдХрд╛рд╕реНрдЯ рд╢рд╛рдЦрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП , рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдпрджрд┐ рдорд╛рди NaN, 0, рдпрд╛ Infinity рд╣реИ , рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред
- рдЕрдиреНрдпрдерд╛, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдорд╛рдирд╡-рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░рд┐рдХреЙрд░реНрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИ: рджрд╢рдорд▓рд╡ рдпрд╛ рдШрд╛рддреАрдп рд░реВрдк рдореЗрдВред
рдореИрдВ рдпрд╣рд╛рдВ рдкрд╕рдВрджреАрджрд╛ рдлреЙрд░реНрдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдореИрдВ рдХреЗрд╡рд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛: рдпрджрд┐ рджрд╢рдорд▓рд╡ рдЕрдВрдХрди рдореЗрдВ рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 21 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдПрдХ рдШрд╛рддреАрдп рд░реВрдк рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ parseInt "100 ... 000" рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрд▓реНрдХрд┐ "1e30" рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрддреНрддрд░ рд╕рднреА рдЕрдкреЗрдХреНрд╖рд┐рдд 2 ^ 30 рдкрд░ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдЬрд╛рджреВ рдирдВрдмрд░ 21 рдХреА рдкреНрд░рдХреГрддрд┐ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ - рд▓рд┐рдЦреЛ!
рдЕрдЧрд▓рд╛, parseInt рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдореВрд▓рд╛рдВрдХ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЖрдзрд╛рд░ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 10 рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рд╣реИ) рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдкреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╡рд░реНрдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред 'рдИ' рд╕реЗ рдорд┐рд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдХреЗрд╡рд▓ "1" рдЫреЛрдбрд╝рдХрд░ рдкреВрд░реА рдкреВрдВрдЫ рдХреЛ рдХрд╛рдЯ рджреЗрддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛрдЧрд╛ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдореВрд▓рд╛рдВрдХ рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рджрд╢рдорд▓рд╡ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ 1 рд╣реИред
рд░рд┐рд╡рд░реНрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛:
(2**30).toString(2)
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдирдВрдмрд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдирдВрдмрд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдореВрд▓рд╛рдВрдХ рдкреИрд░рд╛рдореАрдЯрд░ рднреА рд╣реИред рдХреЗрд╡рд▓ рдпрд╣ рдПрдХ рдЕрдорд╛рдиреНрдп рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдВрдЬрдЕрд░реЛрд░ рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ (рдпрд╣ 2 рд╕реЗ 36 рд╕рдорд╛рд╡реЗрд╢реА рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдЬрдмрдХрд┐ рдкрд╛рд░реНрд╕реЗрдВрдЯ NaN рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк рдПрдХ рд╡рд┐рджреЗрд╢реА рд╣реИрд╢ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рдгрд╛рд▓реА рдХреА рдКрдкрд░реА рд╕реАрдорд╛ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред
рдПрдХ рдкрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп:
'3113'.split('').map(parseInt)
рдХреНрдпрд╛ рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ рдФрд░ рдХреИрд╕реЗ рдареАрдХ рд╣реЛрдЧрд╛?
рдзреНрдпрд╛рди рд╕реЗ рд╡рдВрдЪрд┐рдд
рд╣рдордиреЗ рд╕рднреА рдореВрд▓ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдЙрдирдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рдиреА рдореЗрдВ рдирд╣реАрдВ рдкрдбрд╝рдирд╛ рдерд╛, рдФрд░ рдЙрдирдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЯреЛрд▓реЗрдХрд▓реЗрд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рдмрд╛рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдЕрдЧрд░ рдореИрдВрдиреЗ рдзреНрдпрд╛рди рд╕реЗ рд╡рдВрдЪрд┐рдд рдХреБрдЫ рдХрд┐рдпрд╛, рдпрд╛ рдЧрд▓рддрдлрд╣рдореА рдореЗрдВ рдЦреЛ рдЧрдпрд╛ - рд▓рд┐рдЦрдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ!
рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдУ
рдореИрдВрдиреЗ рдЬрд┐рди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджрд┐рдпрд╛ рд╣реИ рд╡реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рд╡реНрдпрдВрдЬрдиреЛрдВ рд╕реЗ рдирд╣реАрдВ рд╣реИрдВ - рдХреЗрд╡рд▓ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рднреЛрдЬрдиред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддрдХрдиреАрдХреА рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдирд┐рд░рд░реНрдердХ рдФрд░ рдереЛрдбрд╝рд╛ рдмреЗрд╡рдХреВрдл рд╕рдордЭрддрд╛ рд╣реВрдВ: рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХреНрд▓реЛрдЬрд░, рдЬреЙрдЗрдирд┐рдВрдЧ, рдПрдХ рдИрд╡реЗрдВрдЯ рд▓реВрдк, рдореЙрдбреНрдпреВрд▓ / рдлреЗрд╕ / рдореЗрдбрд┐рдПрдЯрд░ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд╛рд╢реНрд╡рдд рд╡рд┐рд╖рдп рд╣реИрдВ, рдФрд░ [рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ "рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди "ред
рдпрд╣ рд▓реЗрдЦ рдПрдХ рд╣реМрдЬрдкреЙрдЬ рдмрди рдЧрдпрд╛, рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╛рдпрд╛ред рдкреАрдПрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ - рдХрдорд╛рд▓ рд╣реИ!
рдмреЛрдирд╕
рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ, рдореИрдВрдиреЗ Google рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдФрд░ рджреБрд░реНрдШрдЯрдирд╛ рд╕реЗ рдореБрдЭреЗ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ред рдпрджрд┐ рдЖрдк рд░реВрд╕реА рд╕реЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ "toString" рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдмреИрдХрд╕реНрдкреЗрд╕ рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдорд┐рдЯрд╛ рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдлрд┐рд░ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ:

рдРрд╕реА рд╡рд┐рдбрдореНрдмрдирд╛! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдкреНрд▓реЗрдмреИрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рднреЗрдЬрд╛ред рдпрд╣ рдПрдХ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд╕реНрд╡-рдПрдХреНрд╕рдПрд╕рдПрд╕ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред