ECMAScript рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛, рднрд╛рдЧ 1 рдХреЛ рд╕рдордЭрдирд╛



рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред рдЬрд╛рдУред

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдирд┐рдореНрди рдХреЛрдб Object.prototype.hasOwnProperty рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ:

const o = {
    foo: 1
}
o.hasOwnProperty('foo') // true
o.hasOwnProperty('bar') // false

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, "o" рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ "hasOwnProperty" рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк - "Object.prototype" (рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╢реНрд░реГрдВрдЦрд▓рд╛) рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВред

рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ Object.hasOwnProperty рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫрджреНрдо рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

Object.prototype.hasOwnProperty (V)

рдЬрдм hasOwnProperty рдХреЛ рддрд░реНрдХ V рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрди рдЪрд░рдг рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: ... рдФрд░ HasOwnProperty (O, P) HasOwnProperty рдЕрдореВрд░реНрдд рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╕реНрддреБ рдХреА рдЕрдкрдиреА рд╕рдВрдкрддреНрддрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╣реИ рдпрд╛ рдирд╣реАрдВред рдмреВрд▓рд┐рдпрди рдорд╛рди рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХреЛ рддрд░реНрдХ O рдФрд░ P рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдСрдкрд░реЗрд╢рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ: "рдЕрдореВрд░реНрдд рдСрдкрд░реЗрд╢рди" рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ [[ ]]? рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ? "рдкреБрд╖реНрдЯрд┐" рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ? рдЪрд▓реЛ рдкрддрд╛ рдХрд░рддреЗ рд╣реИрдВред

  1. P ? ToPropertyKey(V)
  2. O ? ToObject( this)
  3. ? HasOwnProperty(O, P).







  1. (assert): Type(O) Object.
  2. : IsPropertyKey(P) true.
  3. desc ? O.[[GetOwnProperty]](P).
  4. desc undefined, false.
  5. true.





рднрд╛рд╖рд╛ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдкреНрд░рдХрд╛рд░


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

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

рднрд╛рд╖рд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ (рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рдХрд╛рд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдкреНрд░рдХрд╛рд░ рдЬреЛ рдХреЗрд╡рд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬреЗрдПрд╕ рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рд▓реЗрдХрд┐рди рд╡реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ "рд░рд┐рдХреЙрд░реНрдб" (рд░рд┐рдХреЙрд░реНрдб) рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдкреНрд░рдХрд╛рд░ "рдХрдореНрдкреНрд▓реАрд╢рди рд░рд┐рдХреЙрд░реНрдб" (рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб) рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗред

рд╕рд╛рд░ рд╕рдВрдЪрд╛рд▓рди


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

рдЖрдВрддрд░рд┐рдХ рд╕реНрд▓реЙрдЯ рдФрд░ рдЖрдВрддрд░рд┐рдХ рддрд░реАрдХреЗ


рдЖрдВрддрд░рд┐рдХ рд╕реНрд▓реЙрдЯ рдФрд░ рдЖрдВрддрд░рд┐рдХ рддрд░реАрдХреЛрдВ рдХреЛ [[]] рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╛рдореЛрдВ рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЖрдВрддрд░рд┐рдХ рд╕реНрд▓реЙрдЯ рдЬреЗрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рддрддреНрд╡ (рд╕реЗрдЯ) рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╕реНрддреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЗрдПрд╕ рд╡рд╕реНрддреБ рдХреЗ рд╕рджрд╕реНрдп рдХрд╛рд░реНрдп рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ JS рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ [[рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк]] рд╕реНрд▓реЙрдЯ рдФрд░ рдПрдХ рдЖрдВрддрд░рд┐рдХ [[GetOwnProperty]] рд╡рд┐рдзрд┐ рд╣реИред

рдЬреЗрдПрд╕ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд╕реНрд▓реЙрдЯ рдФрд░ рддрд░реАрдХреЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдУ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред [[рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк]] рдпрд╛ рдУ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред [[рдЧреЗрдЯрдСрдирдкреНрд░реЛрдкрд░реНрдЯреА]] ()ред рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА (рдЖрдВрддрд░рд┐рдХ) рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдХрднреА-рдХрднреА рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдмрди рдЬрд╛рддреА рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ [[GetOwnProperty]] рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ:

[[GetOwnProperty]] (P)

рдЬрдм [[GetOwnProperty]] "O" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ "P" рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ: рд╕рд╛рдзрд╛рд░рдг- рд╕реА рдУрдЯреЗрд░рд┐рдирдЧреЗрдЯрдСрдирдкреНрд░реЛрдкрд░реЗрдЯреА рдПрдХ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рд╕реЗ рдЬреБрдбрд╝реА рдирд╣реАрдВ рд╣реИ; рдЬрд┐рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдзрд╛рд░рдг рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рд╛рдзрд╛рд░рдг рдкрд╢реБрдкрд╛рд▓рдХ рдХреЛ "рд╕рд╛рдзрд╛рд░рдг" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рд╕рд╛рдзрд╛рд░рдг рдФрд░ рдЕрд╕рд╛рдорд╛рдиреНрдп (рд╡рд┐рджреЗрд╢реА) рд╣реИрдВред рдПрдХ рд╡рд╕реНрддреБ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдЖрдВрддрд░рд┐рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдирд╛рдордХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛ (рдЬрдм рд╡рд╕реНрддреБ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреА рд╣реИ; рдЕрдкреЗрдХреНрд╖рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ; рдЬрдм рд╡рд╕реНрддреБ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ), рддреЛ рдЗрд╕реЗ рдЕрд╕рд╛рдорд╛рдиреНрдп рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

  1. ! OrdinaryGetOwnProperty(O, P)





рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдЕрд╕рд╛рдорд╛рдиреНрдп рд╡рд╕реНрддреБ рдПрд░реЗ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреА "рд▓рдВрдмрд╛рдИ" рд╕рдВрдкрддреНрддрд┐ рдЧреИрд░-рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреА рд╣реИ: рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд░рдгреА рд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред

рдмреБрдирд┐рдпрд╛рджреА рдЖрдВрддрд░рд┐рдХ рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ ред

рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд░рд┐рдХреЙрд░реНрдб


рдкреНрд░рд╢реНрди рдФрд░ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдПрдХ рдкреВрд░рд╛ рд░рд┐рдХреЙрд░реНрдб рдХреНрдпрд╛ рд╣реИ ред

рдПрдХ рдкреВрд░рд╛ рд░рд┐рдХреЙрд░реНрдб рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рд╣реИ (рдХреЗрд╡рд▓ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд)ред рдЬреЗрдПрд╕ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЖрдВрддрд░рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдПрдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд░рд┐рдХреЙрд░реНрдб рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд╛рдорд┐рдд рдлрд╝реАрд▓реНрдб рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рддреАрди рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ:
[[рдкреНрд░рдХрд╛рд░]]normal, break, continue, return throw. , normal, ┬л () ┬╗ (abrupt comlpetions)
[[Value]], , , , ,
[[Target]]( )

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

рдиреЛрдЯ 1: рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИ; рдХрдИ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдирдВрдЧреЗ рдорд╛рдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдкреВрд░реНрдг рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдиреЛрдЯ 2: рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд▓реЗрдЦрдХ рдкреВрд░реНрдг рд░рд┐рдХреЙрд░реНрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдкреВрд░рд╛ рд░рд┐рдХреЙрд░реНрдб рдПрдХ рдЕрдкрд╡рд╛рдж рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ ([[рдкреНрд░рдХрд╛рд░]]) рдлреЗрдВрдХ рдФрд░ рдореВрд▓реНрдп ([[рдореВрд▓реНрдп]]) рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд╣рдо рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ (рд╡рд┐рд░рд╛рдо, рдЬрд╛рд░реА рдФрд░ рд╡рд╛рдкрд╕реА) рдХреЗ рд▓рд┐рдП рдЕрднреА рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

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

  1. argument - (abrupt), argument.
  2. argument argument.[[Value]].







  1. obj Foo() (obj - ).
  2. ReturnIfAbrupt(obj).
  3. Bar(obj) ( , , obj - , ).

рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди : рд░рд┐рдХреЙрд░реНрдб  ? Foo () ReturnIfAbrupt (Foo ()) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЗрд╕ рд╕рдВрдХреНрд╖реЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдореВрд▓реНрдп рд╣реИ: рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╕рд╛рджреГрд╢реНрдп рд╕реЗ, рд╡реИрд▓ рдПрдВрдЯреНрд░реА рд╣реЛрдиреЗ рджреЛ! рдлреВ () рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ: рдЗрд╕ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ Object.prototype.hasOwnProperty рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ: Object.prototype.hasOwnProperty (P) ... HasOwnProperty рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: HasOwnProperty (O, P) рд╣рдо рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рднреА рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред [GetOwnProperty]] рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди рдХреЗ рдмрд┐рдирд╛: O. [[GetOWnProperty]] рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрд╕реНрдерд╛рдпреА рдПрдХ рдирдпрд╛ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

  1. val Foo().
  2. : val .
  3. val val.[[Value]].





  1. P ToProperty(V).
  2. P , P.
  3. P P.[[Value]].
  4. O ToObject( this).
  5. O , O.
  6. O O.[[Value]].
  7. temp HasOwnProperty(O, P).
  8. temp , temp.
  9. temp temp.[[Value]].
  10. NormalCompletion(temp).





  1. : Type(O) Object.
  2. : IsPropertyKey(P) true.
  3. desc O.[[GetOWnProperty]](P).
  4. desc , desc.
  5. desc desc.[[Value]].
  6. desc undefined, NormalCompletion(false).
  7. NormalCompletion(true).





  1. temp OrdinaryGetOwnProperty(O, P).
  2. : temp .
  3. temp temp.[[Value]].
  4. NormalCompletion(temp).



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

рдкрддрди: рд╡рд╛рдкрд╕реА? рдлреВ ()


рдХреНрдпрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд░рд┐рдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ? рдлреВ () - рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдХреНрдпреЛрдВ рд╣реИ?

рд░рд┐рдХреЙрд░реНрдб рд╡рд╛рдкрд╕реА? рдлреВ () рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рд╡рд╛рдкрд╕реА рд╡реНрдпрд╡рд╣рд╛рд░? рдлреВ () рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЕрдЪрд╛рдирдХ рд╕рдорд╛рдкреНрддрд┐ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИред рд░рд┐рдХреЙрд░реНрдб рд╡рд╛рдкрд╕реА? рдлреВ () рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдлреВ рдПрдХ рдкреВрд░рд╛ рд░рд┐рдХреЙрд░реНрдб рд▓реМрдЯрд╛рддрд╛ рд╣реИред

  1. temp Foo().
  2. temp , temp.
  3. temp temp.[[Value]].
  4. NormalCompletion.





рдмрдпрд╛рди


рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рдХрдерди "рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ" рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ; рдЗрд╕рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


рд╣рдордиреЗ рд╕рд░рд▓ рддрд░реАрдХреЛрдВ рдЬреИрд╕реЗ рдХрд┐ Object.prototype.hasOwnProperty рдФрд░ рд╕рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдЬреИрд╕реЗ HasOwnProperty рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдкрдврд╝рдирд╛ рд╕реАрдЦрд╛ред рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рд╣рдо рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдиреНрдп рд╕рд╛рд░ рд╕рдВрдЪрд╛рд▓рди рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред


рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣реИрдкреНрдкреА рдХреЛрдбрд┐рдВрдЧ!

All Articles