object
рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ object
рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдП рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрд░ рдПрдкреАрдЖрдИ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ object
рд▓реЗрддреЗ рд╣реИрдВ:
Object.getPrototypeOf
Object.getOwnPropertyDescriptor
Object.create
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ ( string
, number
, рдЖрджрд┐ ...) рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Object.create('string')
рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдиреНрдп рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПред
рдПрдХ рдирдпрд╛ object
рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдиреЗ рд╕реЗ рдЙрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдореЙрдбрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕рдорд╛рди рдмрд╛рдзрд╛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред
object
рдкреНрд░рдХрд╛рд░ {}
рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рдЕрдиреНрдп рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд░реНрдпрд╢реАрд▓рддрд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐:
object
object
рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ{}
рдФрд░ any
рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреЗ рд▓рд┐рдП рд╕реБрд╕рдВрдЧрдд рд╣реИ, рдкреНрд░рдХрд╛рд░ рд╣рд░ рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдзрд╛ typeof value === 'object'
рдкреНрд▓рд╕ undefined
рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИред
object
: typeof value === 'object'
рд▓рд┐рдП рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЧрд╛рд░реНрдб рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдХрд▓рдХ Object
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ: Object(value) === value
ред
Object.
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ API рдХреА рд╕реВрдЪреА рдмрдирд╛рдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдВрдЧреЗред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрд░ рдПрдкреАрдЖрдИ рдореЗрдВ Object
рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╢рд╛рдпрдж рдХреБрдЫ es6 рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЛ рдЗрд╕рд╕реЗ (WeakMap, Proxy рдЖрджрд┐) рдлрд╛рдпрджрд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕рдВрдЧреНрд░рд╣ рдлрд╝рдВрдХреНрд╢рди рднреА рдмреЗрд╣рддрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛, рдЬреИрд╕реЗ рдХрд┐ рд░рд┐рдПрдХреНрдЯ рдПрдХ 'рд╕реЗрдЯрд╕реНрдЯреИрдЯ' рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╛ null
, ImmutableJS, рдореЛрд░реА рдЖрджрд┐ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕рдВрдЧреНрд░рд╣ рдХрд╛рд░реНрдп
рд╕реБрдЭрд╛рд╡ рд╕рдореАрдХреНрд╖рд╛ рдмреИрдардХ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИред рдпрд╣ рд╕рдм рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдирдП рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рд╕рд╣реА рдард╣рд░рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ / рд╕рдореГрджреНрдзрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИред рдореВрд▓ рд░реВрдк рд╕реЗ, рдПрдкреАрдЖрдИ рдХреЗ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗ рдЬреЛ "рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ" рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА)
рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрджрд░реНрдн рдХреЗ рд░реВрдк рдореЗрдВ рдкреЛрд╕реНрдЯрд┐рдВрдЧ: рдкрд▓рдХ:
interface String { _primitiveBrand?: string; }
interface Boolean { _primitiveBrand?: boolean; }
interface Number { _primitiveBrand?: number; }
interface ObjectOnly { _primitiveBrand?: void; }
function fn(x: ObjectOnly) { }
// Error
fn(43);
// Error
fn('foo');
// OK
fn({});
// OK
fn(window);
рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ +1ред рдореИрдВ WeakMap
рдПрдХ "рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ" рдПрдкреАрдЖрдИ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рдорд╛рдирддрд╛ рд╣реВрдВред рдЪреВрдВрдХрд┐ рд░рдирдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд╕реНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдВрддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ "рдСрдмреНрдЬреЗрдХреНрдЯ рдмреИрдЧ" рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рднреА рд╣рд▓ рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
Object.observe
рд▓рд┐рдП рдПрдХ рдЧреИрд░-рдЖрджрд┐рдо рд▓рдХреНрд╖реНрдп рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: http://arv.github.io/ecmascript-object-observe/#Object.observe
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реАрд░реНрд╖рдХ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ "рдЖрджрд┐рдо" рд╢рдмреНрдж рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред рдЗрд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ _ "ECMAScript рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░" _ рдпрд╛ _ "рд░рдирдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░" _ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреЛ рдХрд┐ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ ( undefined
рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░рддреАрдХреЛрдВ рд╕рд╣рд┐рдд), рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рд╕реЗ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдХрд╛рдиреВрдиреА object
рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рдирджрдВрдб рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЧрд╛рд░реНрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
let isObject (x) => typeof x === "object";
рдПрдордбреАрдПрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ typeof
рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:
рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд : "рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд"
рдЕрд╢рдХреНрдд : "рд╡рд╕реНрддреБ" (рдиреАрдЪреЗ рджреЗрдЦреЗрдВ)
рдмреВрд▓рд┐рдпрди : "рдмреВрд▓рд┐рдпрди"
рд╕рдВрдЦреНрдпрд╛ : "рд╕рдВрдЦреНрдпрд╛"
рд╕реНрдЯреНрд░рд┐рдВрдЧ : "рд╕реНрдЯреНрд░рд┐рдВрдЧ"
рдкреНрд░рддреАрдХ (ECMAScript 2015 рдореЗрдВ рдирдпрд╛) : "рдкреНрд░рддреАрдХ"
рдореЗрдЬрдмрд╛рди рд╡рд╕реНрддреБ (рдЬреЗрдПрд╕ рдкрд░реНрдпрд╛рд╡рд░рдг рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ) : рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рдирд┐рд░реНрднрд░
рдлрдВрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ (рдФрдЬрд╛рд░ [[рдХреЙрд▓]] ECMA-реиремреи рд╢рдмреНрджреЛрдВ рдореЗрдВ) : "рдлрд╝рдВрдХреНрд╢рди"
рдХреЛрдИ рдЕрдиреНрдп рд╡рд╕реНрддреБ : "рд╡рд╕реНрддреБ"
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд┐рдирд╛, рдЙрдкрд░реНрдпреБрдХреНрдд рдЧрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд╛рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдирд╣реАрдВред рдпрд╣ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрдбрд╝рд╛рдИ рд╕реЗ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ for in
рд▓реВрдк рдФрд░ Object
рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ T extends object
рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдлрд┐рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЧреБрдгреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдпрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕реАрдорд┐рдд рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдПрдХ рдФрд░ рдкреНрд░рдХрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ _ "рдЧреИрд░-рдЖрджрд┐рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░" _ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдЖрдВрд╢рд┐рдХ рд╕рдорд╛рдзрд╛рди рдпреВрдирд┐рдпрди object | Function
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд▓рд╛рдХрд╛рд░реЛрдВ рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧрд╛рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЖрдо рд╕рдорд╕реНрдпрд╛ рд▓рдЧрддреА рд╣реИ; рдпрд╣ рдХрд┐рд╕реА рднреА рдмрд╣рд╛рджреБрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдЧрд╛ рдЬреЛ interface object { ... }
рд▓рд┐рдЦрд╛ рд╣реЛрдЧрд╛ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реАрдзрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕рд╛рдЗрдб рдиреЛрдЯ: рд╣рдо рд╕рднреА рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ @fdecampredon рдХрд╣рд╛рдВ рд╣реИ!
@RyanCavanaugh рдХрд╛рд░реНрдп рдХреЗ рд╢рд╣рд░ рдХрд╛ рдкрд░рд┐рд╡рд░реНрддрди, рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореЗрд░реА рдирдИ рдиреМрдХрд░реА рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ: рдбреА
рдорд╣рд╛рдиред рдореИрдВ TS1.8 рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдореИрдВ рднреА object
рдкреНрд░рдХрд╛рд░ рдХреА рддрд░рд╣ рдХреБрдЫ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рд╕рд╡рд╛рд▓ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ typeof value === 'object'
рдЕрдиреБрд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрд╛рд╣рд░ рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрднрд╛рд╡рд┐рдд object
рдкреНрд░рдХрд╛рд░ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░рдг рд╣реИрдВ:
Object
рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВредрдореИрдВ рдЗрдиреНрд╣реЗрдВ рдХреНрд░рдо рдореЗрдВ рд▓реВрдВрдЧрд╛ред
API рдЬреИрд╕реЗ WeakMap
рдЬреЛ рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рд╡реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рднрд╛рд╖рд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╕рд╛рджреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдареАрдХ рд╣реИ:
function theAnswer() {}
let map = new WeakMap();
map.set(theAnswer, 42);
console.log(map.get(theAnswer)); // 42
рдпрд╣ рдХрд╕реНрдЯрдо API рдХреЗ рд▓рд┐рдП рдЙрддрдирд╛ рд╣реА рд╕рд╣реА рд╣реИ, рдЬрд┐рддрдирд╛ рдХрд┐ рдмрд┐рд▓реНрдЯ-рдЗрди API рдХреЗ рд▓рд┐рдП рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рддреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдХреЗрд╡рд▓ рдЧреБрдгреЛрдВ рдХрд╛ рдПрдХ рдмрдВрдбрд▓ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдХрд╛рд░реНрдп рдЧреБрдг рдХреЗ рдХреЗрд╡рд▓ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдмрдВрдбрд▓ рд╣реИрдВред
рдЪреВрдБрдХрд┐ Function
Object
рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ, Object
рдкрд░ рдЙрдкрд▓рдмреНрдз рд╕реНрдерд┐рд░ рдФрд░ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрднрд╡ рд╣реИ:
class DeepThought {
static getAnswer() {
return 42;
}
}
let computer = Object.create(DeepThought);
console.log(computer.getAnswer()); // 42
console.log(Object.getPrototypeOf(computer)); // [Function: DeepThought]
рдЬрдмрдХрд┐ рдКрдкрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝рд╛ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдЙрд╕ рдПрдкреАрдЖрдИ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ Object
рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рднреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ object
рдкреНрд░рдХрд╛рд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рднрд╛рд╖рд╛ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ (рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдореЗрдВ null
, рд▓реЗрдХрд┐рди рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ null
рдореБрдХрд╛рдмрд▓реЗ рдХреЛрдИ рд░рдЦрд╡рд╛рд▓реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ)ред
function isObject(value) {
return typeof value === 'object' || typeof value === 'function';
}
рдореЗрд░реЗ рдкрд╛рд╕ рдбреАрдк рдореИрдк рдирд╛рдордХ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдиреЗрд╕реНрдЯреЗрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдкреНрд░рдореБрдЦ-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдЖрджрд┐рдо рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЬреИрд╕реЗ, рдпрд╣ рдЖрджрд┐рдо рдФрд░ рдЧреИрд░-рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╕реЗ рдПрдХ рдХрд╕реНрдЯрдо NonPrimitive
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдерд╛:
interface NonPrimitive {
[key: string]: any;
[index: number]: any;
}
export class DeepMap {
// ...
private mapObject(obj: NonPrimitive): NonPrimitive { /* ... */ }
}
рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдирд╣реАрдВ рд╣реИ рдЬрдм рдореБрдЭреЗ NonPrimitive
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореИрдВ рдмрд╕ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
export class DeepMap {
// ...
private mapObject(obj: object): object { /* ... */ }
}
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдКрдкрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ obj
рдкреИрд░рд╛рдореАрдЯрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рд╕рдм рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Object
_language type_ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдпрд╣ рдЙрди рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдВрдбрд▓ рд╣реИ, рдЬрд┐рдирдХреЗ рдкреНрд░рдореБрдЦ-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдореИрдВ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдореИрдВ рд╕рд╣рдордд рд╣реВрдБ рдХрд┐ рдХрд╛рд░реНрдп object
s рд╣реИрдВред рдЕрднрд┐рдкреНрд░рд╛рдп рдЖрджрд┐рдо рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЗрд░рд╛рджрд╛ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╢рд╛рдпрдж рдореИрдВ typeof value === 'object'
рдХреА рдЗрд╕ рдмрд╛рдд рдХреЗ рд╕рд╛рде рдХреБрдЫ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдХреНрдпрд╛ рдпрд╣ object
рдкреНрд░рдХрд╛рд░ рдХреЛ рддрджрд░реНрде рд╕рдВрдкрддреНрддрд┐ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ (рдЬреИрд╕реЗ any
) рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
const foo: object = {};
foo.bar = 'baz';
рдирд╣реАрдВ
рдХреНрдпрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдВрддрд░ рд╣реИ
export class DeepMap {
// ...
private mapObject(obj: object): object { /* ... */ }
}
рддрдерд╛
export class DeepMap {
// ...
private mapObject(obj: Object): Object { /* ... */ }
}
? ( object
рдмрдирд╛рдо Object
)ред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Function
Object
рд╕реЗ рдлреИрд▓реА рд╣реБрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдХреНрдпрд╛ рддреБрдо рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реЛ?
@trusktr null
рдФрд░ undefined
рдЕрд▓рд╛рд╡рд╛ рд╕рднреА рдорд╛рди Object
рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ Object
рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╕рдВрдЦреНрдпрд╛, рдмреВрд▓рд┐рдпрди рдпрд╛ рдкреНрд░рддреАрдХ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдХреЗрд╡рд▓ рдЧреИрд░-рдЖрджрд┐рдо рдореВрд▓реНрдп object
рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ; рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЖрджрд┐ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛, рдПрдХ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛ред object
рдкреНрд░рдХрд╛рд░ рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдПрдХ рдЧреИрд░-рдЖрджрд┐рдо рдореВрд▓реНрдп рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЧреБрдг рдХреНрдпрд╛ рд╣реИрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ +1ред рдореИрдВ
WeakMap
рдПрдХ "рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ" рдПрдкреАрдЖрдИ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рдорд╛рдирддрд╛ рд╣реВрдВред рдЪреВрдВрдХрд┐ рд░рдирдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд╕реНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдВрддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИредрдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ "рдСрдмреНрдЬреЗрдХреНрдЯ рдмреИрдЧ" рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рднреА рд╣рд▓ рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред