рдЯрд╛рдЗрдкреЛрдлрд╝ рдФрд░ рд╕реНрдЯреНрд░реИрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░

рдЖрдЬ рдореИрдВрдиреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд╡рд┐рдирд╛рд╢реА рдЯрд╛рдЗрдорд░ рдереЗ рдЬреЛ рдПрдХ рдкреВрд░реНрдг рдЬрд╛рдирд╡рд░ рдмрд▓ clearTimeout / ClearInterval рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рдереЗред рд╢рд░реНрддреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдерд╛ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдпрд╛ рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ / рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрд╛ рд╣реИ isNativeObject() , isNativeFunction() , рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рджрд░реНрдЬрдиреЛрдВ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди / рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди / рдирд╣реАрдВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдВрдХреЗрдд рдПрдХ "рдЪрд╛рд▓рдмрд╛рдЬреА" рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред

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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реБрдЖ рдХрд┐ рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореВрд▓реНрдп рджреЗрддреЗ рд╣реИрдВ
 Worker.prototype + ""; // FF 3.6 [xpconnect wrapped native prototype] // Op 11 [object DedicatedWorkerPrototype] // Sa 4 [object WorkerPrototype] // Ch 10 [object Object] 

рд╕рднреА рджреЗрд╢реА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдореЗрдВ рд╕рдлрд╛рд░реА, рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ - [object WorkerConstructor], [object WorkerPrototype]

рдпрд╣ рд▓реЗрдЦ рдЯрд╛рдЗрдкреЛрдлрд╝ рдФрд░ рд╕реНрдЯреНрд░реАрдВрдЧ рдХреЗ рд╕рд╛рде рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдЕрдиреНрдп рджрд┐рд▓рдЪрд╕реНрдк рд╡реНрдпрд╡рд╣рд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 3.6, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 4


 typeof Worker // function Worker + "" // [object Worker] -    [object ...] Worker.prototype + "" // [xpconnect wrapped native prototype] ??? //   XMLHttpRequest  FileReader 

 typeof localStorage.prototype // object -     undefined localStorage.prototype + "" // null 

 navigator.geolocation + "" // [object GeoGeolocation] -        Geo-     [object Geolocation] 

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрджреНрдзрд░рдг рдмрджрд▓рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдХреЛ рд╕реНрдЯреНрд░реАрдВрдЧ рдореЗрдВ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ:
 (function(){return'a'+'b';}).toString(); // function () { // return "ab"; // } 

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдиреЗрд╡реАрдЧреЗрдЯрд░ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ

рдУрдкреЗрд░рд╛ 11


рдУрдкреЗрд░рд╛ рдЯрд╛рдЗрдкреЛ рдФрд░ рд╕реНрдЯреНрд░реАрдВрдЧ рдХреЗ рд╕рд╛рде рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдВрджрд┐рдЧреНрдз рд╣реИ:
 Worker.prototype + "" // [object DedicatedWorkerPrototype] - Dedicated! XMLHttpRequest.prototype + "" // [object XMLHttpRequestPrototype] EventSource.prototype + "" // [object EventSourcePrototype] 

рдирд╛рдо рд╕рдлрд╛рд░реА рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, "рдЙрдзрд╛рд░" рдХрд┐рд╕рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?
рдУрдкреЗрд░рд╛ рдЖрдкрдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯрд░.рдпреВрдЬрд╝рд░рдПрдЬреЗрдВрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ

рд╕рдлрд╛рд░реА рдФрд░ рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА


рд╕рдлрд╛рд░реА, рдЗрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдЗрд╕рдХреА рд╕рднреА рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЯрд╛рдЗрдкреЛрдлрд╝ === 'рдСрдмреНрдЬреЗрдХреНрдЯ' рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ (рдПрдХреНрд╕рдПрдЪрдЖрд░ рдФрд░ рд╡рд░реНрдХрд░) 'рдлрд╝рдВрдХреНрд╢рди' рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
 RegExp.prorotype + "" // // -    IE /(?:)/ 

рд╕рдлрд╛рд░реА рдиреЗрд╡реАрдЧреЗрдЯрд░.рд╕реБрдПрд░рдПрдЬреЗрдВрдЯ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЕрдкрд╡рд╛рдж рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ

IE 8


рдореИрдВрдиреЗ IE рдХреА рдЬрд╛рдБрдЪ рдХреА рд╣рд░ рдЪреАрдЬ рд╕реЗ рдХреЗрд╡рд▓ XMLHttpRequest рдФрд░ RegExp рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕реВрдЪреА рдЗрддрдиреА рдмрдбрд╝реА рдирд╣реАрдВ рд╣реИ:
 typeof XMLHttpRequest // object XMLHttpRequest.prototype + "" // [Interface prototype object] RegExp + "" // \nfunction RegExp() {\n [native code]\n}\n -        

 RegExp.prorotype + "" // // -     typeof document.getElementById // object o_O 

IE 8 рдиреЗрд╡реАрдЧреЗрдЯрд░ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рдПрд╕реЗрд░рдЬреЗрдВрдЯ, IE 9 рдПрдХ рд╕рдлрд╛рд░реА рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
IE 9 рдореЗрдВ, рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдмрдЧреНрд╕ рддрдп рдХрд┐рдП рдЧрдП рдереЗ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ [рдореВрд▓ рдХреЛрдб] рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЕрднреА рднреА \ n рдкреВрд░реНрдг рд╣реИрдВ

рдХреНрд░реЛрдо 10 рдмреАрдЯрд╛


Chrome рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ "рд╕реБрд╡рд┐рдзрд╛" рд╣реИ:
 Worker.hasOwnProperty("toString") // true -        ... 

рдХреНрд░реЛрдо, рд╕рдлрд╛рд░реА рдХреА рддрд░рд╣, рдиреЗрд╡рд┐рдЧреЗрдЯрд░.рд╕реБрдПрд░рдПрдЬреЗрдВрдЯ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЕрдкрд╡рд╛рдж рдХреЛ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ

рд╡рд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ


рд╕рд╛рд░рд╛рдВрд╢, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдкреВрд░реА рддрд╛рд▓рд┐рдХрд╛: goo.gl/tD1jr
рдкрд░реАрдХреНрд╖рдХ рдХреЛрдб: jsfiddle.net/azproduction/V4LeE

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


рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ (8 рдирд╣реАрдВ) рдПрд╕рд┐рдб 3 рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЕрднреА рднреА рдХрдИ рдХреАрдбрд╝реЗ рд╣реИрдВред рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕реНрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдФрд░ рдЕрдкрдиреЗ рдбрдХрд╛рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред

рдЕрдзреНрдпрдпрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╡рд╕реНрддреБрдПрдВ: рдХрд╛рд░реНрдпрдХрд░реНрддрд╛, XMLHttpRequest, CanvasContext, CanvasContext3D, Storage, WebSocket, FileReader, EventSource, navigator.geolocation, HTMLElement, RegExp, querySelectorAll, getElementsByTagName, рдЪрд╛рдЗрд▓реНрдбрд╢реЙрдЯред
рдмреНрд░рд╛рдЙрдЬрд╝рд░реНрд╕: рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 4, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 3.6, рдУрдкреЗрд░рд╛ 11, рд╕рдлрд╛рд░реА, IE 8, IE 9, рдХреНрд░реЛрдо 10 рдмреАрдЯрд╛, рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╛рд░реА рдЖрдИрдУрдПрд╕ 4.2.1

рддрдХрдиреАрдХреА рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдореИрдВ рд╕рднреА рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ HTMLElement рдХреЗ рд╕рд╛рде рдбрд┐рдмреНрд░реАрдлрд┐рдВрдЧ рдЕрд▓рдЧ рд╕реЗ рдирд╣реАрдВ рдХреА рд╣реИ - рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдмрдХрд╡рд╛рд╕ рд╣реИред

PS рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХрд╛ рдЖрднрд╛рд░реА рд░рд╣реВрдБрдЧрд╛, рдЬреЛ рдмрд╛рдХреА рдореЛрдмрд╛рдЗрд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (рдХреНрд░реЛрдо рдореЛрдмрд╛рдЗрд▓, рдУрдкреЗрд░рд╛ рдореЛрдмрд╛рдЗрд▓) рдХреЛ рд╕реНрдХреИрди рдХрд░рддреЗ рд╣реИрдВ - рдкрд░реАрдХреНрд╖рдХ рдХреА рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рд╕реВрдЪрдирд╛ рдХреЛ рдореБрдЭреЗ LAN рдореЗрдВ рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - рддреЛ рдЗрд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВ - рдореИрдВ рдмрд╛рдж рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рджреВрдВрдЧрд╛ред

UPD рдиреЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 4, IE 9 (рдзрдиреНрдпрд╡рд╛рдж hf35 ), рдореЛрдмрд╛рдЗрд▓ рд╕рдлрд╝рд╛рд░реА iOS 4.2.1, рдУрдкреЗрд░рд╛ рдХреЗ рд▓рд┐рдП ws (рдзрдиреНрдпрд╡рд╛рдж рд╕реНрдХреАрди ) рдЬреЛрдбрд╝рд╛
рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ querySelectorAll, getElementsByTagName, childNodes

UPD2 Object.prototype.toString (...) рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЙрддреНрддрд░ рдЬреЛрдбрд╝реЗ рдЧрдП

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


All Articles