Typescript: рд╕реБрдЭрд╛рд╡: "рд╕реБрд░рдХреНрд╖рд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди рдСрдкрд░реЗрдЯрд░", рдпрд╛рдиреА x?.y

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЬреБрд▓ре░ 2014  ┬╖  205рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: microsoft/TypeScript

рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐

  • TC39 рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрдм рдЪрд░рдг 3 (ЁЯОЙЁЯОЙЁЯОЙЁЯОЙЁЯОЙ) рдкрд░ рд╣реИ
  • рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдЬрд╛рд░реА рд╣реИ
  • рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.7 рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
  • рд░рд╛рдд рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдкрд░ рд╣рдо рдпрд╣рд╛рдВ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВрдЧреЗ
  • рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓ рдкрд░ рд░реЛрдХ рдЬрдм рддрдХ рд╕рдорд┐рддрд┐ рдореЗрдВ рдЗрд╕рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдкреНрд░рд╢реНрди рдЦреЛрд▓реЗрдВ

  • рдХреНрдпрд╛ рд╡рд┐рд╢реЗрд╖-рдЖрд╡рд░рдг, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, document.all рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?

рд╕реА # рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдВрдкрддреНрддрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЪреАрдиреА рд╣реЛрддреА рд╣реИ рдЬрд╣рд╛рдВ null (рдпрд╛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, undefined ) рд╡рд╕реНрддреБ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд┐рдВрджреБ рдкрд░ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

var x = { y: { z: null, q: undefined } };
console.log(x?.y?.z?.foo); // Should print 'null'
console.log(x?.baz); // Still an error
console.log(x.y.q?.bar); // Should print 'undefined'

рдПрдХреНрд╕реЗрд╕рд░реНрд╕ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХреЛрдбрдЬреЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдЪрд╛рд╣рд┐рдПред


@DanielRosenwasser рдлрд░рд╡рд░реА 27, 2018 рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд: рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ "рдирд▓ рдкреНрд░реЛрдкреЗрдЧреЗрд╢рди" рдСрдкрд░реЗрдЯрд░ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

Committed ES Next Suggestion Update Docs on Next Release

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЪрд░рдг 3 рд╣реИ

рдХреЗрд╡рд▓ рдЬрд╢реНрди рдордирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЕрдирд▓реЙрдХ рдХрд░рдирд╛

рд╕рднреА 205 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рддреЛ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рдирд┐рдореНрди рдХреА рддрд░рд╣ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

x && xy && xyz && xyzfoo

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ x, y, z, рдФрд░ foo рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ && рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╕рдЪреНрдЪрд╛рдИ рдЖрджрд┐рдо рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЬрд╛рддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

"     "?.trim()?.indexOf("hello")

"" рджреЗрддрд╛ рд╣реИред

рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП == $ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ $ null рд╕реЗ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛рддреЗ (рдЬреЛ рд╣рдореЗрдВ рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред

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

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреБрдЫ рдЪрд░реНрдЪрд╛рдПрдВ рд╣реБрдИ рд╣реИрдВ:

:+1:

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ ES7 (рдпрд╛ ES8 рдпрд╛ ES9 рдпрд╛ ...) рдкрд╣рд▓реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 0 / "" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдЯреАрдХ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд╛рдпрдж рдХреБрдЫ рдЕрд╕рд╣рдорддрд┐ рд╣реЛрдЧреАред

: +1: рдореИрдВ рдпрд╣ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕реЗ рдкрд╣рд▓реЗ ESxx рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рд░рд▓ рдФрд░ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рдирд▓-рд╕реБрд░рдХреНрд╖рд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдЬреИрд╕реЗ "?ред" рдФрд░ "?:" ES6 рд╕реНрдкреЗрдХ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ ES6 рд╕реНрдкреЗрдХ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╢рд░реНрдо рд╕реЗ рдЕрдкрдирд╛ рд╕рд┐рд░ рд▓рдЯрдХрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЗрддрдиреА рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдмрд╛рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдирд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд╛рдЧрд▓рдкрди рд╣реЛрдЧрд╛ред рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рднрд╛рд╖рд╛рдПрдБ рдЗрдирдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИрдВ: рд╡реЗ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВред

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдХрд▓реНрдкрдирд╛ рд╕реЗ рд╡рд┐рдЪрд▓рди рд╣реЛрдЧрд╛ (рдЪреВрдВрдХрд┐ рд╡рд░реНрддрдорд╛рди рдпреБрдХреНрддрд┐ рдЗрддрдиреА рдЕрджреВрд░рджрд░реНрд╢реА рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ)ред рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХрд▓ рд╡рд┐рдЪрд▓рди рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ред TS рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рд╡рд┐рд╢рд╛рд▓ (VAST) рдмрд╣реБрдордд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡реЛрдВ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЕрдЧрд░ рдпрд╣ рдЕрдВрддрддрдГ ES рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рдЬреЛ рдмрдбрд╝рд╛ рд▓рд╛рдн рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛, рд╡рд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЕрдВрд╢ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдФрд░ рд╣рдВрд╕рддреЗ рд╣реБрдП рдзреАрдореА ES рдпреБрдХреНрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдХрдИ рд╡рд░реНрд╖реЛрдВ (рдХрдо рд╕реЗ рдХрдо) рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦреЗрдЧрд╛ред

рдореИрдВ рджрд┐рдорд╛рдЧ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рд╣рдордд рд╣реВрдБ428

@ рдмреНрд░рд╛рдпрди 428 рдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдИрдПрд╕ 7 рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЕрдВрддрд┐рдо рдИрдПрд╕ 7 рдПрдХ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреЛрдИ рднреА рдЦреБрд╢ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ рдЬреЛ _potentially _ (рдпрд╛ рдирд╣реАрдВ) рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ ES рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ ES рджрд┐рд╢рд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рдкрд░реАрдХреНрд╖рдг рд╣реЛрдЧрд╛ред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА ES рдЪрд░реНрдЪрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ... рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдПрдХ рдирд┐рдЬреА рдЙрдкрд╕рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ES рдХреЗ рд▓рд┐рдП рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрдкрдирд╛рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рд╕рд╛рде (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрдбреНрдпреВрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред

ES рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЕрдкрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рд╕рд╛рде

рдореБрдЭреЗ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдЗрд╕реЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдорд╛рдирддреЗ рд╣реИрдВред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 1.0 рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ES6 рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рд╕рдорд┐рддрд┐ рдХреЗ рд╢реЗрдбреНрдпреВрд▓ рдореЗрдВ рджреЗрд░реА рдиреЗ рдЗрд╕реЗ рд░реЛрдХ рджрд┐рдпрд╛ред рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЯрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рджреЛрд╣рд░рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╣рд┐рдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЗрд╕реЗ ES7+ (рдЬреИрд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдЯрд╛рдЗрдк рдХрд░рдиреЗ) рдореЗрдВ рдмрдирд╛рдиреЗ рдХрд╛ ~ 0% рдореМрдХрд╛ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рдиреЗ рдХрд╛ ~ 100% рдореМрдХрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рд╡рд╕рд╛ рддреАрд░ рджреЛ рдерд╛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ)ред рдирдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЕрдЬреАрдмреЛрдЧрд░реАрдм рдмреАрдЪ рдореЗрдВ рдЧрд┐рд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

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

рдЕрдВрддрддрдГ, рдРрд╕реА рдХрд┐рд╕реА рднреА рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧтАФрд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрдпреЛрдЧреАтАФрдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред TS рдХреЛ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рднрд╛рд╡реА рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рджрд┐рди рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдВрднрд╛рд╡рд┐рдд рдкреНрд░рдмрдВрдзрд┐рдд рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рд╢рд╛рдпрдж рдЗрд╕ рд╕рдВрджреЗрд╢ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдкреНрдЯ-рдЗрди рдХрдВрдкрд╛рдЗрд▓рд░ рдзреНрд╡рдЬ?

рдЯреАрдПрд╕ рдХреЛ рдИрдПрд╕ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рдЬрдВрдЧрд▓реА рдирд╣реАрдВ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдЫреЛрдЯреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реЛрдЧреА рдЕрдЧрд░ рдЯреАрдПрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╢рд░реНрдорд╛рддреЗ рд╣реИрдВред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░реЙрдореИрди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦ рд╕рдХреЗрдВ рдФрд░ рдлрд┐рд░ --рд╣рд╛рд░реНрдордиреА рдзреНрд╡рдЬ (рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ) рдХреЗ рдкреАрдЫреЗ рдПрдХ рд╕рдВрджрд░реНрдн рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░ рд╕рдХреЗрдВред рдЗрд╕ рддрд░рд╣ рд╣рдо рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ ES7 рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдмрд╛рд░-рдмрд╛рд░ рд▓реБрдХ-рдЕрдк рдХреЗ рдХрд╛рд░рдг рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдпрд╛ рддреЛ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

($tmp0 = x, $tmp0 === void 0 ? void 0 : 
    ($tmp1=$tmp0.y,  $tmp1 === void 0 ? void 0 : 
        ($tmp2 = $tmp1.z,  $tmp2 === void 0 ? void 0 : $tmp2)))

рдпрд╛ Proxy рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдпрд╛рджрдЧрд╛рд░ рдЭрд┐рд▓реНрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

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

рдХреЛрдбрдкреНрд▓реЗрдХреНрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдХрд╛рдлреА рд╡реЛрдЯ рдереЗ (61)

рдкрд░рдорд╛рдгреБ-рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП atom рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рджрд░реНрдж рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рдмрд╣реБрдд рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдЙрддрдирд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рди рд╣реЛ рдЬрд┐рддрдирд╛ рдХрд┐ рдирд┐рдпрддрддреНрд╡рд╡рд╛рдж рдПрдХ рдзреВрд░реНрдд ? рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ)ред рдХрд┐рд╕реА рднреА рдХреЙрдлрд╝реЗрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓реЗрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд╣ рдЬреЛ рд╕реАрдзреЗ рд╕реНрдкреЗрд╕-рдкреЗрди рдХреА рддрд░рд╣ рдбреАрдУрдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИ (рдЬрд╣рд╛рдВ рджреГрд╢реНрдп рдирд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдпрд╛ рджреГрд╢реНрдп рд╕рдВрд▓рдЧреНрди рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдп рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдЧреИрдЬрд╝рд┐рд▓рд┐рдпрди ? рдЙрдкрдпреЛрдЧ рдорд┐рд▓реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ 16 рд╣реИ https://github.com/atom-community/autocomplete-plus/blob/f17659ad4fecbd69855dfaf00c11856572ad26e7/lib/suggestion-list-element.coffee

рдлрд┐рд░ рд╕реЗ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ, рдФрд░ рдореБрдЭреЗ рдПрдХ рдорд┐рд▓рд┐рдпрди if( && fest ) { then } рдХреА рдмрдЬрд╛рдп ? #$ рдЪрд╛рд╣рд┐рдП

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдкрдардиреАрдп рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ _need_ рдХреЗ рд▓рд┐рдП рднреА рдмрд╣реБрдд рдЖрдо рд╣реИ рдЬрдм рдЖрдк XHR рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдгреАрдп рдЕрдкрдирд╛ рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рд▓реВрдк рдЪрд▓рд╛рддрд╛ рд╣реИред

рдареАрдХ рд╣реИ рдЕрдм рдореИрдВрдиреЗ рдзрд╛рдЧрд╛ рдкрдврд╝ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореИрдВ _sigh_ рд╕рдордЭрддрд╛ рд╣реВрдБред

we'd have to somehow make x, y, z, and foo each evaluate at most once.

рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдПрдХреНрд╕реЗрд╕ рдкрд░рд┐рдгрд╛рдо рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ:

typeof foo !== "undefined" && foo !== null ? (ref = foo.bar) != null ? ref.baz() : void 0 : void 0;

(рдореБрдЭреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП undefined рдЪреЗрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ: рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ var init рдЯрд╛рдЗрдкрдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП)

+1

рдЖрдЬ рд╕рдорд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ, рдбрд╛рд░реНрдЯ рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдорд░реНрдерди рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ: https://github.com/gbracha/nullAwareOperators/blob/master/proposal.md

рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ред

рд╕рдВрднрд╡рдд: рдПрдХ рдСрдл-рдж-рд╡реЙрд▓ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдбрдЬрди рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕рднреА рдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреБрдВрдЬреА рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдареАрдХ рд╣реЛрдЧрд╛:

if (aaa?.bbb?.ccc) {}

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ

if (__chain(aaa, "bbb", "ccc")) {}

__chain рдлрд╝рдВрдХреНрд╢рди рдХреЛ __extends рдХреЗ рд╕рдорд╛рди рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред __chain рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ arguments рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, null рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдЧрд╛рдореА рд╕рджрд╕реНрдп instanceof Object рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдЗрд╕рдореЗрдВ рд╕рджрд╕реНрдп рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдкрд╛рд╕ рдХрд░рдХреЗ (рдФрд░ рдХрд╡рд░ рдХреЗ рддрд╣рдд .apply() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП ...

if (aaa?.bbb?.ccc?(1, 2, 3)) {}

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ

if (__chain(aaa, "bbb", "ccc", [1, 2, 3])) {}

рдпрд╣ рд▓рдВрдмреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдЙрддреНрдкрдиреНрди рдЬреЗрдПрд╕ рдХреЛ рдпрдереЛрдЪрд┐рдд рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдмрдирд╛рдП рд░рдЦреЗрдЧрд╛ред

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдХреБрдЫ рд╣реИ?

рдпрджрд┐ aaa?.bbb?.ccc? a.b.c рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╕рднреА рдкреНрд░реЙрдкреНрд╕ рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

if (aaa?.bbb?.ccc?(1, 2, 3)) {}

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ

if (__chain(aaa, "bbb", "ccc")(1, 2, 3)) {}

?

@metaweta : рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ void 0 рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ ... рдХреНрдпрд╛ рдЙрд╕ рддрд░рд╣ рдХреА рд╣рд╛рд░ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ?

рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛:

var result = one?.two?.three;

рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ:

var $a, $b, $c;
var result = $a = one, $b = $a ? $a.two : void 0, $b ? $b.three : void 0;

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рд╢рд╛рдпрдж instanceof Function рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

(рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рдХреЗ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрдиреЗ рдХрд╛ рдорд╛рдореВрд▓реА рдирдХрд╛рд░рд╛рддреНрдордХ рдкрд╣рд▓реВ ... рд╢рд╛рдпрдж рдЖрдИрдЖрдИрдПрдлрдИ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)

@ kevinb7 : рдпрджрд┐ ccc рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде, __chain рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡реИрдз рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдПрдХ TypeError рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрдЧрд╛ред

@ рдмреИрдХ-рдЖрдИрдУ рдЬрдм рдХреЛрдИ рд╕рдВрдкрддреНрддрд┐ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдХ рд▓реБрдХрдЕрдк рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд === рд╢реВрдиреНрдп 0 рджреЗрддрд╛ рд╣реИред рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рд╢реВрдиреНрдп рдЬреИрд╕реЗ рдЭреВрдареЗ рдорд╛рдиреЛрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред

@metaweta : рдирд╣реАрдВ, рдпрд╣ рдирд╣реАрдВ рд╣реИ: http://jsfiddle.net/25LppbL6/

рд╕рд╛рде рд╣реА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрд╕ рдЯреАрдо рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдвреАрд▓реА рд╕рдорд╛рдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╛рдЧрд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдВрдЯрд░ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВред

@ рдмреИрдХ-рдЖрдИрдУ рд╣рд╛рдБ рдпрд╣ рдХрд░рддрд╛ рд╣реИ: http://jsfiddle.net/25LppbL6/2/

@ рдмреИрдХ-рдЖрдИрдУ рд╢реВрдиреНрдп рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ a?.b рдХрд╛ рдЗрдЪреНрдЫрд┐рдд рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреНрдпрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ "рдпрджрд┐ рд╕рдВрдкрддреНрддрд┐ рдмреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ", рддреЛ рдореЗрд░рд╛ рдХреЛрдб рд▓рдЧрднрдЧ рд╕рд╣реА рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЕрд╢рдХреНрдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЗрд╕реЗ рдЕрд╢рдХреНрдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧреИрд░-рдореМрдЬреВрдж рдЧреБрдгреЛрдВ рдХреЗ рд▓реБрдХрдЕрдк рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдВрдкрддреНрддрд┐ рдореМрдЬреВрдж рд╣реИ рд▓реЗрдХрд┐рди рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░ рд╕реЗрдЯ рд╣реИред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╢реВрдиреНрдп 0 === рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп Object.hasOwnProperty() рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ред

рдпрджрд┐ рд╢рдмреНрджрд╛рд░реНрде "рдпрджрд┐ рдЧреБрдг b рд╕рддреНрдп рд╣реИ рддреЛ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ" рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдХреЛрдб рдареАрдХ рд╣реИ рдФрд░ рдХреБрдЫ рд╣рдж рддрдХ JS рдореБрд╣рд╛рд╡рд░реЗ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред

рдЙрдореНрдо ... рдЬрдм рддрдХ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ ... рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмреЗрд▓рд╛ рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдореБрдЭреЗ рдФрд░ рднреА рд╕рд╣реА рд╕рд╛рдмрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ... var result рдЕрднреА рднреА рд╕рднреА 3 рдорд╛рдорд▓реЛрдВ рдореЗрдВ undefined рд╣реИред рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдХреЛ рдЖрджрд┐рдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ рдЖрдЧреЗ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ ...

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

''?.toString рдХрд╛ рдЗрдЪреНрдЫрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реИ?

@ kevinb7 : рдпрджрд┐ ccc рдХреЛрдИ рдлрдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде, __chain рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡реИрдз рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдПрдХ TypeError рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрдЧрд╛ред

рдЕрдЪреНрдЫреА рдмрд╛рддред

@metaweta : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧ toString рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХрд╛ рдмрд┐рдВрджреБ рдХрд╣рд╛рдВ рд╣реИ, рдпрд╣ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рд╣рдж рддрдХ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк 0 рдХреЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╕рджрд╕реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд░рд╣реЗ рд╣реИрдВ, рдЭреВрдард╛, рдпрд╛ ''ред

:+1:
рдХреЛрдгреАрдп 2 рдиреЗ рдПрд▓реНрд╡рд┐рд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЙрдирдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рд╛

@рдореЗрдЯрд╛рд╡реЗрдЯрд╛ :

''?.toString'' рдХрд╛ рдЗрдЪреНрдЫрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдХреНрдпрд╛ рд╣реИ?

рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм ''?.toString() рд╣реИ рддреЛ рдпрд╣ рд╣реЛрдЧрд╛:

if ('' != null) {
  ''.toString();
}

рдирдореВрдирд╛

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░реЙрдореИрди рдкреНрд░рд╕реНрддрд╛рд╡ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХреЗрдВ

@ kevinb7 рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ: http://wiki.ecmascript.org/doku.php?id=strawman :existential_operator

рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ PropertyAccessExpression рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ?. рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рд╣реА рд╕рд╣рдпреЛрдЧреА рд╣реЛ (рдмрд╛рдПрдВ рд╕рд╣рдпреЛрдЧреА рдХреЗ рдмрдЬрд╛рдп . ) рдЕрдиреНрдпрдерд╛ рдПрдорд┐рдЯрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдмреНрд░реЗрдВрдбрдирдИрдЪ рдХреА рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдЬреЛ рдЗрд╕реЗ рднреА рджрд░реНрд╢рд╛рддреА рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЗрд╕рдХреЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ PropertyAccessExpression рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛? рд╕рд╣реА рд╕рд╣рдпреЛрдЧреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП (рдмрд╛рдПрдВ рд╕рд╣рдпреЛрдЧреА рдХреА рддрд░рд╣ред) рдЕрдиреНрдпрдерд╛ рдПрдорд┐рдЯрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

@ рдмрд╛рд╕рд░рдд рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рджрд╛рдПрдВ рд╕рд╣рдпреЛрдЧреА рдФрд░ рдмрд╛рдПрдВ рд╕рд╣рдпреЛрдЧреА ?. рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

@zlumer

рджрд╛рдПрдБ рд╕рд╛рд╣рдЪрд░реНрдп рдФрд░ рдмрд╛рдПрдБ рд╕рд╛рд╣рдЪрд░реНрдп рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг? рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

. рдХреЛ рд╕рд╛рд╣рдЪрд░реНрдп рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ foo?.bar?.baz AST рдореЗрдВ рдмрди рдЬрд╛рддреА рд╣реИ (рдпрджрд┐ рд╣рдо ?. рдХреЛ рд╕рдорд╛рди рдорд╛рдирддреЗ рд╣реИрдВ):

                    // foo.bar.baz = PropertyAccessExpression
                    //   .expr foo.bar =  PropertyAccessExpression
                    //     .expr foo = Identifier
                    //     .name bar = Identifier
                    //   .name baz = Identifier

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрддреНрд╕рд░реНрдЬрди рдХреА рдЬрд░реВрд░рдд рд╣реИ

foo != null ? (ref_1 = foo.bar) != null ? ref_1.baz() : void 0 : void 0;

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

                    // foo.bar.baz = PropertySafeAccessExpression
                    //   .name foo =  Identifier
                    //   .expr bar.baz = PropertySafeAccessExpression
                    //      .expr bar = Identifier
                    //      .name baz = Identifier

рдЬрд╝рд░рд╛ рд╕реЛрдЪрд┐рдП рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ AST рдХреЛ JavaScript_ рдореЗрдВ рдХреИрд╕реЗ рдмрджрд▓реЗрдВрдЧреЗ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛рдПрдБ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдВрдЧреАред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдХрд░рддрд╛ рд╣реИ: рдЧреБрд▓рд╛рдм:

@zlumer , @basarat рдиреЗ рдЬреЛ рдХрд╣рд╛, рдЙрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг 1 + 2 + 3 рдбрд╛рд▓реВрдВрдЧрд╛ред

рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рдСрдкрд░реЗрд╢рди рдкрд╣рд▓реЗ рд╣реЛрдЧрд╛ред

рдпрджрд┐ + рдмрд╛рдПрдВ-рд╕рд╣рдпреЛрдЧреА рд╣реИ, рддреЛ рдЗрд╕реЗ ((1 + 2) + 3) рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛рдпрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдпрджрд┐ + рд╕рд╣реА-рд╕рд╣рдпреЛрдЧреА рд╣реИ, рддреЛ рдЗрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ (1 + (2 + 3)) рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреАред

рдЖрдк рд╕рд╡рд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдлрд░реНрдХ рдкрдбрд╝реЗрдЧрд╛ред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдпрд╣ рд╣реЛрдЧрд╛! рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ "hello" + 2 + 3 ред

  • рд╡рд╛рдо-рд╕рд╣рдпреЛрдЧреА: (("hello" + 2) + 3) => ("hello2" + 3) => "hello23"
  • рд░рд╛рдЗрдЯ-рдПрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡: ("hello" + (2 + 3)) => ("hello" + 5) => "hello5"

(рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ/рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ + рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд▓реЗрдлреНрдЯ-рдПрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред)

@basarat , рдореЗрд░реА рд╕рдордЭ @BrendanEich рдиреЗ рдХреНрдпрд╛ рдХрд╣рд╛ (рдФрд░ рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рд╡рд╣ рдореБрдЭреЗ рд╕рд╣реА рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ!) _not_ рд╣реИ рдХрд┐ ?. рд╕рд╣реА-рд╕рд╣рдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреА рд╕рдВрдкрддреНрддрд┐ рдкрд░ рдкрд╣реБрдВрдЪ ?. рдХрд╛ рдЕрдзрд┐рдХрд╛рд░-рд╕рд╣рдпреЛрдЧреА рд╣реЛрдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрд╛рд░реНрд╕ рдХрд░реЗрдЧрд╛

o.p?.q.r.s

рдЬреИрд╕рд╛

((o . p) ?. (q . (r . s))) # or something close to this

рдХреЗ рдмрдЬрд╛рдп

((((o . p) ?. q) . r) . s)

рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╣рдорд╛рд░реЗ рдПрдПрд╕рдЯреА рдХреЛ рд╕рдордЭрджрд╛рд░ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрдзрд╛рд░ рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реА рдЙрддреНрд╕рд░реНрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИред

@basarat @DanielRosenwasser рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрдм рддрдХ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдПрдХ рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред
рд╡рд╛рдо-рд╕рд╣рдпреЛрдЧреА ?. рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдФрд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ:

foo?.bar?.baz

рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рд▓рдЧрднрдЧ):

var ref = ((ref = foo) == null) ? null : ((ref = ref.bar) == null) ? null : ref.baz;

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕рдордЭ рдирд╣реАрдВ рдЖ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдПрдХ рд░рд╛рдЗрдЯ-рдПрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡ ?. рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдПрдХ рд░рд╛рдЗрдЯ-рдПрд╕реЛрд╕рд┐рдПрдЯрд┐рд╡ рдХреИрд╕реЗ рд╣реЛрдЧрд╛? рдХрд╛рдоред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

@zlumer рд░рдирдЯрд╛рдЗрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рд╣рдпреЛрдЧреА рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рд╕рд┐рд░реНрдл рдПрдПрд╕рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдбреИрдирд┐рдпрд▓ рд░реЛрд╕реЗрдирд╡рд╛рд╕рд░ рдиреЗ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛: is not that ?. is right-associative, but that CoffeeScript special cases property accesses on the right of the ?. to be right-associative ред

рд╣рдорд╛рд░реЗ рдПрдПрд╕рдЯреА рдХреЛ рд╕рдордЭрджрд╛рд░ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрдзрд╛рд░ рджреЗрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реА рдЙрддреНрд╕рд░реНрдЬрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдереЛрдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИред

@DanielRosenwasser рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж: рдЧреБрд▓рд╛рдм:

@ рдмрд╛рд╕рд░рдд рдзрдиреНрдпрд╡рд╛рдж, рдЕрдЪрд╛рдирдХ рдпрд╣ рд╕рдм рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛: рд╕реНрдорд╛рдЗрд▓реА:

@basarat рдХреА рдлрд╝рд░рд╡рд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рдорд╛рди, рдореИрдВ.... _sigh_...

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ 99% рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд▓ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рдЪ рдХрд╣реВрдВ, рддреЛ x?.b?.c рдХреМрди рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ x рдПрдХ number рд╣реИ? рдЬрдм рд╣рдо _not_ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ ( string рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде)ред рдЫреЛрдЯреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо x && x.b рдпрд╛ x === 0 ? null : x.b рдХреЗ рд╕рд╛рде рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рддреЛ, рдХреНрдпрд╛ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ ?. рдХреЗрд╡рд▓ рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдХреЛрдИ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред рдФрд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред

рдлрд┐рд░ рдкреВрд░реА рдмрд╛рдд a && a.b && a.b.c рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред

@schungx рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдХреЛрдИ рд╕рджрд╕реНрдп "рдХреЛрдИ" рдкреНрд░рдХрд╛рд░ рд╣реИ? рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдордирд╛ рдХрд░реЗрдВ? рдпрд╛ рдмрд╕ рдЗрд╕реЗ рдЬрд╛рдиреЗ рджреЗрдВ рдФрд░ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдХреА рдЖрд╢рд╛ рдХрд░реЗрдВ?

рдЕрдЪреНрдЫрд╛, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡? рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдордирд╛ рдХрд░реЗрдВред рдирд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ... :-)

рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рддрд░реНрдХ:

  1. рдпрд╣ рдПрдХ рд╢реЙрд░реНрдЯ-рд╣реИрдВрдб рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХреЛрдИ any рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдмрд╕ рд▓реЙрдиреНрдЧ-рд╣реИрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  2. рдпрджрд┐ рдХреЛрдИ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ any рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ!
  3. any рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓рдЪреАрд▓реЗ рдкреНрд░рдХрд╛рд░ рдЬреИрд╕реЗ any рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рд╢реЙрд░реНрдЯ-рд╣реИрдВрдбреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрдЧ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣ рд░рд╣рд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, any рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕реАрдорд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕реА рдХреЗ (void *) рдХреА рддрд░рд╣ рд╣реИ - рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рдкрд░рдорд╛рдгреБ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рдпрд╣ рдЕрджреНрднреБрдд рдСрдкрд░реЗрдЯрд░ рд╣реЛрдЧрд╛ !! рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ ES6 / ES7 / TypeScript рдХреЗ рд▓рд┐рдП

var error = a.b.c.d; //this would fail with error if a, b or c are null or undefined.
var current = a && a.b && a.b.c && a.b.c.d; // the current messy way to handle this
var currentBrackets = a && a['b'] && a['b']['c'] && a['b']['c']['d']; //the current messy way to handle this
var typeScript = a?.b?.c?.d; // The typescript way of handling the above mess with no errors
var typeScriptBrackets = a?['b']?['c']?['d']; //The typescript of handling the above mess with no errors

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдПрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ - рднреНрд░рдорд┐рдд рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП? рдП рд╕реЗ? b : c рдХрдерди a?.b рдХрдердиреЛрдВ рдХреЗ рд╕рд╛рде:

var doubleDots = a..b..c..d; //this would be ideal to understand that you assume that if any of a, b, c is null or undefined the result will be null or undefined.
var doubleDotsWithBrackets = a..['b']..['c']..['d'];

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

рджреЛ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрджрд┐ рдЗрд╕рдХреА рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд░реЛрдХ рджреЗрддреА рд╣реИ рдФрд░ рдорд╛рди рд▓реЗрддреА рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред (рдЬреИрд╕рд╛ рдХрд┐ d рд╢реВрдиреНрдп рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдЧрд╛)ред

рджреЛ рдмрд┐рдВрджреБ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ, рдЕрдзрд┐рдХ рджреГрд╢реНрдпрдорд╛рди рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди-рд╡рд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдпрд╣ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреА рдЦрд┐рд▓рд╡рд╛рдбрд╝ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ - рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╣реА рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕реЗ

1..toString(); // works returning '1'
var x = {};
x.1 = {y: 'test' }; //fails currently
x[1] = {y: 'test' }; //works currently 
var current = x[1].y; //works
var missing= x[2].y; //throws exception
var assume= x && x[2] && x[2].y; // works but very messy

рдирдВрдмрд░ рджреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдЖрдкрдХрд╛ рдХреЙрд▓ рдЬрд┐рд╕реЗ рдЕрдкрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдореМрдЬреВрджрд╛ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдПрдХ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ!

  1. рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рд╣реЛрддрд╛ рд╣реИ ( x.1.y == runtime error )
var err = x..1..y; // should fail as well, since 1 is not a good property name, nor a number to call a method, since it's after x object.
  1. рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ Number.prototype . рд╕реЗ рдХрд┐рд╕реА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирдВрдмрд░ рдирд╣реАрдВ рд╣реИ
var err = x..1..y; // should work as well, resulting 'test' in this case
var err = x..2..y; // should work as well, resulting undefined in this case

рдЧрддрд┐рд╢реАрд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде:

var correct1 = x..[1]..y; //would work returning 'test'
var correct2 = x..[2]..y; //would work returning undefined;

рдЖрдк рд▓реЛрдЧреЛрдВ рдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ?

PS foo?.bar рдФрд░ foo?['bar'] рд╕рд┐рдВрдЯреИрдХреНрд╕ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореМрдЬреВрджрд╛ ? : рдСрдкрд░реЗрдЯрд░ рдФрд░ ?. рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╣реА рд▓рд╛рдЗрди рдкрд░ рдмрд╣реБрдд рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП ?. рдФрд░ ?['prop'] рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

var a = { x: { y: 1 } };
var b = condition ? a?.x.?y : a?.y?.z;
var c = condition ? a?['x']?['y'] : a?['y']?['z'];

рдбрдмрд▓ рдбреЙрдЯреНрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд .. рдФрд░ ..['prop']

var a = { x: { y: 1 } };
var b = condition ? a..x..y : a..y..z;
var c = condition ? a..['x']..['y'] : a..['y']..['z'];
рдЖрдкрдХреЛ рдХреМрди рд╕рд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИ?

рдмрд╣реБрдд рд╣реА рд░реЛрдЪрдХред :+1:

IMHO, рджреЛ рдмрд┐рдВрджреБ рдЕрдзрд┐рдХ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реЛрдВрдЧреЗред рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рджреЛ рдмрд┐рдВрджреБ рдПрдХ рд╢реНрд░реЗрдгреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 1..4 ) рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рдореЗрдВ рдЕрдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдпрд╛ рд╕рд╢рд░реНрдд рдХрд╛ рдЕрд░реНрдердкреВрд░реНрдг рдЕрд░реНрде рднреА рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреЛ рдмрд┐рдВрджреБ рдПрдХ рд╣реА рдЕрд░реНрде рдХреЛ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

@schungx рдореЗрд▓рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдЬреАрдм рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдорджрдж рдХрд░реЗрдЧрд╛: a?['b'] рдпрд╛ рдпрд╣ a?() ред

+1 ?

a?['b'] рдФрд░ a?() рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдореБрдЭреЗ рдЕрдЪреНрдЫреЗ рд▓рдЧрддреЗ рд╣реИрдВред

рд▓реЗрдХрд┐рди рдлрд┐рд░, рдореИрдВ рд╕рд┐рд░реНрдл рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ-рдЕрдВрдзрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВред

+1 рд░реВрдмреА рдиреЗ рдЕрднреА рдЕрд╕реНрддрд┐рддреНрд╡рд╡рд╛рджреА рдСрдкрд░реЗрдЯрд░ https://twitter.com/mikepack_/status/657229703443451904 рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИред рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рднреА рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣ рдХреЛрдб рдХреНрд▓реАрдирд░ рдмрдирд╛ рджреЗрдЧрд╛

+1 рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!

рдХреГрдкрдпрд╛, рд▓рд╛рдЧреВ рдХрд░реЗрдВ?. рдСрдкрд░реЗрдЯрд░, рдЬреИрд╕рд╛ рдХрд┐ рд╕реА # рдХрд░рддрд╛ рд╣реИ

+1 рдореИрдВ рдЗрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

+1
рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдмрджрд╕реВрд░рдд: рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп && рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрдиреАрдпред рдХреБрдЫ рд╕рджрд╕реНрдп
рдЖрдк рдХрдм рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ: рдХреБрдЫ рдЪрд░?.рдХреБрдЫ рд╕рджрд╕реНрдп

+1, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛.... (рдореЗрд░реЗ рд▓рд┐рдП рд╕рд░реНрд╡рд╛рдзрд┐рдХ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛)

+1, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ!
рдХреЗрд╡рд▓, рдпрджрд┐ рд╡рд╕реНрддреБ рдЬрдЯрд┐рд▓ рд╣реИ, рддреЛ рд╡реНрдпрдВрдЬрдХ ? рд╕реЗ рднрд░рд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмрд╛рдж (var result=myValue?.a?.b?.c?.d?.e;) рдЬрдм рдореБрдЭреЗ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (var result=?myValue.abcde;)ред

+1 - рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдФрд░ рд╕реАрдПрд╕ рд╕реЗ рдЯреАрдПрд╕ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдм рддрдХ рдореЗрд░реА рдЯреАрдо рдХреА рд╕рдмрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред

+1 рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ:

var x = { y: { z: null, q: undefined } };
var z: x|y|z = x?.y?.z;

рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реЗ:

var x = { y: { z: null, q: undefined } };
var z: z|void = x?.y?.z;

x?.y?.z рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣рдореЗрд╢рд╛ z рдлрд╝реАрд▓реНрдб рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдмреЗрд╢рдХ рдкреНрд░рдХрд╛рд░ рд╢реВрдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ, рддреЛ рдпрд╣ z рдлрд╝реАрд▓реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

+1 рдпрд╣ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЬрдЯрд┐рд▓ рдЬреЗрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдХреНрдпрд╛ рдпрд╣ рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдорддрджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ? рдпрд╛ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреБрдЫ рдЗрдВрдЬреАрдирд┐рдпрд░рд┐рдВрдЧ рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╣реИрдВ?

рдЕрдм рддрдХ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд┐рддрд┐ рдХреЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рдирдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐-рд╕реНрддрд░реАрдп рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рдЦрддрд░рдирд╛рдХ рд╣реИред

https://github.com/Microsoft/TypeScript/issues/16#issuecomment -57645069 рджреЗрдЦреЗрдВред

рдЕрд╕реНрддрд┐рддреНрд╡рд╡рд╛рджреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдкрд░ рдПрдХ рдФрд░ рд╡рд░реНрддрдорд╛рди рдЪрд░реНрдЪрд╛ рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИ (рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдЪрд╛рд░, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддреЗ):

рдЗрд╕реЗ ES рдореЗрдВ рд▓рд╛рдиреЗ рдореЗрдВ рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ "+1" рдХрд╣рд╛рдВ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?

@msklvsk ESDiscuss

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

рдЗрд╕рдХрд╛ рдкреБрдирд░реНрдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЯреНрд░рд┐рдкрд╡рд╛рдпрд░ рдПрдХ рдареЛрд╕ ES рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реЛрдЧрд╛ рдЬреЛ рдЕрдЧрд▓реЗ рдЪрд░рдг рддрдХ рдкрд╣реБрдБрдЪреЗрдЧрд╛, рдпрд╛ ES рд╕рдорд┐рддрд┐ рдХреА рдПрдХ рдЖрдо рд╕рд╣рдорддрд┐ рд╣реЛрдЧреА рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд╣реЛрдЧреА (рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдпрдереЛрдЪрд┐рдд рд╣реЛ рд╕рдХреЗрдВ) рдпрдХреАрди рд╣реИ рдХрд┐ рд╡реЗ "рдЬреАрддреЗрдВрдЧреЗ")ред

рдЬреАрд╡рди рдмреЗрдХрд╛рд░ рд╣реИ

рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рд╣рдЯрд╛рдирд╛ :+1:s. рдХреГрдкрдпрд╛ GitHub рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ рдЕрдкрдиреЗ рдирд┐рдХрдЯрддрдо TC39 рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдлреВрд▓ рдФрд░ рдХреИрдВрдбреА рднреЗрдЬреЗрдВред

рдПрдХ рдмрд╛рд░ рдЬрдм рдореБрдЭреЗ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ рдореЗрдВ рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЧрдИ, рддреЛ рдХреЛрдИ рдкреАрдЫреЗ рдирд╣реАрдВ рд╣рдЯреЗрдЧрд╛ред рдЯреАрдПрд╕ рдореЗрд░реЗ рд▓рд┐рдП рдорд░ рдЪреБрдХрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЦрдбрд╝рд╛ рд╣реИред

@algesten рдореИрдВ swift рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рд╣рдо рд╕реНрд╡рдпрдВ рднрд╛рд╖рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ coffescript рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ (рдореИрдВ рдЙрддреНрдкрд╛рджрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)ред рд╣рдо рдЬреВрди 2016 рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ , рдЬрд╣рд╛рдВ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ coffescript рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ TypeScript рдиреЗ рдкрд┐рдЫрд▓реЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬ рд╡реГрджреНрдзрд┐ рджреЗрдЦреА рд╣реИ:

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ: рдЧреЛ рдпрд╛ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдмрд╛рд╣рд░, рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рд╣рдордиреЗ рдЬреЛ рд╕рдмрд╕реЗ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА рднрд╛рд╖рд╛ рджреЗрдЦреА рд╣реИ, рд╡рд╣ рд╣реИ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯред рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╕рдорд░реНрдерд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрдкрд░рд╕реЗрдЯ рдФрд░ рдПрдВрдЧреБрд▓рд░ 2 рдлрд╛рдЙрдВрдбреЗрд╢рди рдиреЗ рд▓рдЧрд╛рддрд╛рд░ рджреВрд╕рд░реА рддрд┐рдорд╛рд╣реА рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд▓рд╛рдн рдХрдорд╛рдпрд╛ рд╣реИ, рдЬреЛ #31 рд╕реЗ #26 рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рд╢реАрд░реНрд╖ 30 рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдПрдХрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдерд╛, рдФрд░ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рджреВрд╕рд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЫрд▓рд╛рдВрдЧ (рд╕реНрдЯреИрдВрдбрд░реНрдб рдПрдордПрд▓, 7 рд╕реНрдкреЙрдЯ)ред #26 рдкрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдм рдПрд░рд▓рд╛рдВрдЧ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рд╕реЗ рдПрдХ рд╕реНрдерд╛рди рдкреАрдЫреЗ рдФрд░ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкреАрдЫреЗ рдЪрд╛рд░, рдЬреЛ рд╢реАрд░реНрд╖ 20 рд╕реЗ рдареАрдХ рдмрд╛рд╣рд░ рд╣реИред рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рдордиреЗ рд╕рд╡рд╛рд▓ рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рдЧрддрд┐ рд╣реИ рдЕрдЧрд▓реА рджреЛ рд╕реЗ рддреАрди рддрд┐рдорд╛рд╣рд┐рдпреЛрдВ рдореЗрдВ рд╢реАрд░реНрд╖ 20 рдореЗрдВ рдЬрдЧрд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд▓реБрдЖ рдХреА рдкрд╕рдВрдж рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рддреЗ рд╣реБрдПред

2014 рддрдХ coffescript рд░реБрдЭрд╛рди рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕реЗ рдЕрдзрд┐рдХ рдерд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ , рдЬрдм рдЧрд┐рд░рд╛рд╡рдЯ рд╢реБрд░реВ рд╣реБрдИ рдереАред

рдирдИ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 2.0 рд╕рдЦреНрдд рдирд▓ (рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд) рдЬрд╛рдВрдЪ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЬрд░реВрд░реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!

рдпрд╣ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдЧрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡реИрдирд┐рд▓рд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рдЕрд╢рдХреНрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рд╕рддреНрдп рдЬрд╛рдВрдЪ рдХреЗ рд╡рд┐рдкрд░реАрдд, TC39 рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рддреБрдЪреНрдЫ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдПрдХ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реЛрдЧрд╛, рдмрд╕ рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧрд╛ рдЬрдм рдпрд╛ рддреЛ рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛ, рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛред

@bterlson рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ? рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдХреНрдпрд╛ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ?

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╣рд╛рди рд▓рд╛рднреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ "рднрд╡рд┐рд╖реНрдп рдЖрдЬ рдЖрдкрдХреЛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ"ред рдпрд╣ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ рд╣реИрдВред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдлрдВрдХреНрд╢рди рдЪреЗрдирд┐рдВрдЧ рд▓реЛрдХрдкреНрд░рд┐рдп рдореБрд╣рд╛рд╡рд░рд╛ рд╣реИ рдФрд░ рд╕рдЦреНрдд рдирд▓ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдпрд╣ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐? рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

TS 2 рдЕрджреНрднреБрдд рдЕрд╢рдХреНрдд рдЬрд╛рдБрдЪ рдиреЗ рдЗрд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕реЗ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП!

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рдХрд░ рдореИрдВ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реВрдВ рдХрд┐ рд░рдЦрд░рдЦрд╛рд╡ рд╕реЗ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреИрд╕реЗ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред

рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ ES рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдкреНрд░рд╢рд╕реНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, рдЕрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╣рд╛рдВ рд╣реЛрдЧреА рдпрджрд┐ рдЯреАрдПрд╕ рдЯреАрдо рд╣рдореЗрд╢рд╛ рдИрдПрд╕рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреАрдЪрд░ рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдФрд░ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реА рд╣реЛрдЧреА?

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

  • рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ a?.b рд╕рдВрдХрд▓рди-рд╕рдордп рдкрд░ рдорд╛рдиреНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рдЬрдм a.b рдорд╛рдиреНрдп рд╣реЛред
  • рдЗрд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдпрд╣ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдпрджрд┐ рдирд┐рд╖реНрдкрд╛рджрди null рдпрд╛ undefined рдорд╛рди рдХреЗ рд╕рд╛рде рдордзреНрдп-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ рддреЛ рд╡рд╣ рдорд╛рди рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм ES рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдЧрд╛ рддреЛ рд╡реЗ рдХреМрди рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рд╣реИрдВ рдЬреЛ рдЕрд╕рд╣рдорддрд┐ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

a?.b рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдореМрдЬреВрджрд╛ (рдФрд░ рднрд╡рд┐рд╖реНрдп?) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдЯреЛрдХрди ?. рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рдЗрд╕реЗ 'рд╕реБрд░рдХреНрд╖рд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди рдСрдкрд░реЗрдЯрд░' рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рди рд╕рдХрддрд╛ рд╣реИ (рдЙрдореНрдореАрджреЛрдВ рдХреЗ рд╕рд╛рде @cervengoc рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд)ред

a?(b) рдФрд░ a?[b] рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдкрд░ рд╣реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рд░реЛрдз рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрдирдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдПрдХ рдЯрд░реНрдирд░реА ?: рдСрдкрд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ a?.b рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЦреБрд╢ рд╣реЛрдВрдЧреЗ!

рдПрдХ рдЖрджрд░реНрд╢ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ ES рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдкреНрд░рд╢рд╕реНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред

рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐-рд╕реНрддрд░ рдХреЗ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рд╣рдо рдкреВрд░реА рддрд░рд╣ рдЕрд╕рд╣рдордд рд╣реИрдВред рдПрдХ рд╕рдорд┐рддрд┐ рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдЪрд▓рд╛ рд░рд╣реА рд╣реИ - рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рджреНрд╡рд╛рд░рд╛ рдПрдХрддрд░рдлрд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдПрдХрддрд░рдлрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░ рд╕рдХрддреА рд╣реИред

рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рдиреЗ рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдЬрд░реВрд░реА рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рднреА рдЬрд░реВрд░реА рд╣реИ! рдлрд┐рд░ рд╕реЗ, рдЕрдкрдиреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдорд┐рддрд┐ рдХреЗ рдкрд╛рд╕ рд▓реЗ рдЬрд╛рдПрдВ ред

рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм ES рдЗрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдЧрд╛ рддреЛ рд╡реЗ рдХреМрди рд╕реЗ рд╣рд┐рд╕реНрд╕реЗ рд╣реИрдВ рдЬреЛ рдЕрд╕рд╣рдорддрд┐ рдкреИрджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХрдо рд╕реЗ рдХрдо, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд╕рд╣рдорддрд┐ рд╣реЛрдЧреА рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ null рдпрд╛ undefined рдЙрди рдорд╛рдиреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╕рдордп, рдпрд╛ рд╣рдореЗрд╢рд╛ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ undefined ред рдЗрд╕ рдмрд╛рдд рдХреЛ рд▓реЗрдХрд░ рднреА рдХреБрдЫ рд╡рд┐рд╡рд╛рдж рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреНрд░реИрдХреЗрдЯреЗрдб рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрд╣ рднреА рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ a?.b.c рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреНрдпрд╛ рд╣реИред ?. рдмрдирд╛рдо .? рдмрдирд╛рдо a.b? рдХрд╛ рднреА рд╕рд╡рд╛рд▓ рд╣реИред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ delete рдСрдкрд░реЗрдЯрд░ рдкрд░ рдХреНрдпрд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред

рдЗрд╕ рдкрд░ ES DIscuss рд╕реВрддреНрд░ 100 рд╕реЗ рдЕрдзрд┐рдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рд╣реИред рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдХреЛрдИ рдХрдореА рдирд╣реАрдВ рд╣реИ! рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣рд╛рдВред рд╢рд╛рдпрдж рдЗрд╕реАрд▓рд┐рдП рдХрд┐рд╕реА рдиреЗ рдЕрднреА рддрдХ TC39 рдкрд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ _also_ рд╣рдо рдПрдХ рдРрд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдЬрд▓реНрджрдмрд╛рдЬреА рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реЛ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рдХреНрд╖рдорд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдореИрдВрдиреЗ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдзрд╛рдЧреЗ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛, рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рджреЗрдЦ рд▓реВрдВрдЧрд╛ред

рд╣рдо рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рд╕рдорд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдореЗрд░реА рдИрдорд╛рдирджрд╛рд░ рд░рд╛рдп рдореЗрдВ рдпрд╣ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрднреА рднреА _good_ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬреЛ рд╕рдмрд╕реЗ рд╕рдлрд▓ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рджреЗрдЦреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдЯреЛрдЯрд▓ рдХрдорд╛рдВрдбрд░ рдпрд╛ рдЗрд░рдлрд╝рд╛рди рд╡реНрдпреВ) рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рд╕рдлрд▓ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рди рдХрд┐ рдХрд┐рд╕реА *рд╕рдорд┐рддрд┐ рджреНрд╡рд╛рд░рд╛"ред рдмреЗрд╢рдХ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╣реИ рд╕рд╣реА рдЙрджрд╛рд╣рд░рдгред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрднрдЧ рдпрдХреАрди рд╣реИ, рдХрд┐ рдЕрдЧрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдХреЗрд▓реЗ рд╣реА рдкреВрд░рд╛ ES6 рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ, рддреЛ рджреБрдирд┐рдпрд╛ рдЕрдм рдПрдХ рдмреЗрд╣рддрд░ рдЬрдЧрд╣ рд╣реЛрддреАред

рд╕рд╛рде рд╣реА, рдЬрд┐рди рдЕрд╕реНрдкрд╖реНрдЯрддрд╛рдУрдВ рдХрд╛ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рд╡реЗ 99% _theoretical_ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╣реИрдВ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреА рдУрд░ рд╕реЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред рдХреМрди рдЗрд╕рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, null рдпрд╛ undefined ? рдмрд╕ рдПрдХ рдХреЛ рдЪреБрдиреЗрдВ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдЙрд╕реА рддрд░рд╣ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВрдЧреЗред

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

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

рдПрдХ рдЖрдЦрд┐рд░реА рд╡рд┐рдЪрд╛рд░ред рдореИрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд ES рдереНрд░реЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднрд╛рдЧрд╛ рд╣реВрдВ, рдФрд░ рдПрдХ рдмрд╛рдд рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ: рд╡реЗ рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╡реЗ рдХреБрдЫ рдРрд╕рд╛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдПрдХ рд╕рд╢рд░реНрдд рд╕рджрд╕реНрдп рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрдЯрд░ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕рдВрддреБрд╖реНрдЯ рдФрд░ рдЦреБрд╢ рд░рд╣реВрдВрдЧрд╛ред рд╕рд╢рд░реНрдд рдЖрдордВрддреНрд░рдг, рд╕рд╢рд░реНрдд рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд░ рдлреИрдВрд╕реА рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╡реИрдз рдЬреЗрдПрд╕ рдХреЛрдб рд╣реИред рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╡реЗ рд╕рдВрднрд╡рддрдГ рд╡рд╣рд╛рдВ рдмреИрдареЗ рд░рд╣реЗрдВрдЧреЗ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдПрдХ рдорд╣рд╛рди рдпреЛрдЬрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджрд┐рди рдХреЗ рдЕрдВрдд рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдк рд░рдпрд╛рди рдпрд╛ TC39 рдХреА рд╕рд╣реА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд░реНрд╢рд╛ рд░рд╣реЗ рд╣реИрдВред рд░рдпрд╛рди рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдиреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдбрд┐рдЬрд╛рдЗрди рд▓рдХреНрд╖реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рд╣реИрдВред рдореВрд▓ рдФрд░ рдЕрднреА рднреА рдмрд╣реБрдд рд╡рд░реНрддрдорд╛рди рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ рд╣реИред рд╡рд╣ рднрд╛рд╖рд╛ рдирд╣реАрдВ рдЬрд┐рд╕реЗ рд▓реЛрдЧ рдЪрд╛рд╣реЗрдВрдЧреЗ (рдЙрджрд╛. рдбрд╛рд░реНрдЯ, рд╣рдХреНрд╕). рдЬрдм рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдиреЗ рдЗрд╕рдХреЗ рдкреВрд░реНрд╡-рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреА рд▓рд╛рдЧрдд (рдЬреИрд╕реЗ рдореЙрдбреНрдпреВрд▓) рдХреЛ рдХрдард┐рди рддрд░реАрдХреЗ рд╕реЗ рд╕реАрдЦрд╛ рд╣реИред рд╣рдо рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд┐рдЬреА рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдПрдХ рдЪреБрдиреМрддреА рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд ES рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕рдВрдЧрдд рд╣реИред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдХреА рд░рди-рдЯрд╛рдЗрдо рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╕рддрд╣ рдкрд░ рдЬреЛ рд╕рд░рд▓ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рдЙрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ TC39 рдиреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ "рд╕реЗрд╡" рдХрд┐рдпрд╛ рд╣реИред ES4 рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдЗрд╕рдореЗрдВ рдЕрдЪреНрдЫреЗ, рдирд╡реАрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдХрдореА рдереА, рдмрд▓реНрдХрд┐ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред TC39 рдиреЗ рдЦреБрдж рдХреЛ рдЖрдХрд╛рд░ рджрд┐рдпрд╛ рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рд╛рдЭрд╛ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓реЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдХреИрд╕реЗ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ ES2015 рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ ES4 рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рди-рдЯрд╛рдЗрдо рд╣реИ рдЬреЛ 10 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рд╕реЗ рдХреЛрдб рдЪрд▓рд╛рддрд╛ рд╣реИ, рдареАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╛рд╖рд╛ рдореЗрдВ рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред ES2016 рддреВрдлрд╛рди рд╕реЗ рдкрд╣рд▓реЗ рдХреА рдЦрд╛рдореЛрд╢реА рдереАред ES2017 рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдХреА "рдЙрдЪрд┐рдд" рдорд╛рддреНрд░рд╛ рд╣реИ рдФрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╢рд╛рд╕рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рддреА рд╣реИред

рддреЛ рдЪреАрдЬреЛрдВ рдХреЗ "рдЕрд▓рдЧ рдкрдХреНрд╖" рдкрд░ рд╣реЛрдиреЗ рд╕реЗ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдЬреЛ "рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП" рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╕рдореАрдЪреАрдирддрд╛ рдХреЛ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИред

@kitsonk рдореЗрд░рд╛ рдорддрд▓рдм "рдЕрд▓рдЧ рдкрдХреНрд╖" рдирдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдерд╛, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЗрд░рд╛ рдорддрд▓рдм рдЙрд╕ рдХрд╛рдо рдХреЛ рдиреАрдЪрд╛ рджрд┐рдЦрд╛рдирд╛ рдирд╣реАрдВ рдерд╛ рдЬреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ ES6 рдореЗрдВ рдбрд╛рд▓рд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдИрдПрдордУ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдбрд┐рдЬрд╛рдЗрди рд▓рдХреНрд╖реНрдп рдерд╛ рдФрд░ рдпрд╣ рдХрдИ рдЕрдиреНрдп рдУрдкрдирд╕реЛрд░реНрд╕ рд╕рд╛рдорд╛рдиреЛрдВ рдХреА рддрд░рд╣ рдХрд╣рд░ рдмрдирдиреЗ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕реНрдкрд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЬрд╣рд╛рдВ рдкреНрд░рддрд┐рднрд╛рд╢рд╛рд▓реА рд▓реЛрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдЖрд╕рд╛рди рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЪреАрдЬреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░ рджреЗрдЧрд╛ рдФрд░ рдЪреАрдЬреЛрдВ рдХреЛ рдЦрддреНрдо рдХрд░ рджреЗрдЧрд╛, рдФрд░ рдХреБрдЫ рд╕реАрдорд╛рдУрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдЖрдордВрддреНрд░рдг рдпрд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЖрджрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛, рдЖрджрд┐ред . рдЙрд╕ рдлрд╝реЛрд░рдо рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рднреА рджрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкрд╛рдЧрд▓рдкрди рд╣реИред рдореБрдЭреЗ рдЕрдм рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдШрдЯрдирд╛ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рд╡рд┐рдкрд░реАрдд-рдЙрддреНрдкрд╛рджрдХ рд╣реИред

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдпрд╣ рдПрдХ рджрд░реНрдж рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рд╕рджрд╕реНрдп рдЕрдВрддрд┐рдо ES6 рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реЛ рдЧрдПред рд▓реЗрдХрд┐рди рджреВрд╕рд░реА рдУрд░, рд╣рдордиреЗ рдЗрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ред ES6 рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ред рдФрд░ рдпрд╣реА рд╣рдорд╛рд░реА рдУрд░ рд╕реЗ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рд╣реИред рдореЛрдЯреЗ рддреМрд░ рдкрд░, рд╣рдореЗрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдХреЛрдб рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ, рд╣рдо рдЗрд╕рдХрд╛ рдЦреБрд╢реА-рдЦреБрд╢реА рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рд╣реА, рдФрд░ рд╕рдм рдХреБрдЫред рд╣рдо (рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореИрдВрдиреЗ) рдЙрди рджрд░реНрджреЛрдВ рдХреЛ рдирд╣реАрдВ рджреЗрдЦрд╛ рдЬреЛ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рд╣рдореЗрд╢рд╛ рдирд┐рдЬреА рд╕рджрд╕реНрдпреЛрдВ рдпрд╛ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЦреБрд╢ рдереЗред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рд╛, рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╕реБрд╡рд┐рдзрд╛ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реИред рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо/рд▓рд╛рдЗрдмреНрд░реЗрд░реА/рдкреНрд▓рдЧрдЗрди рдЖрджрд┐ рдЪреБрдирддреЗ рд╕рдордп рд╣рдо, рд╕рд╛рдзрд╛рд░рдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╣рдореЗрд╢рд╛ рд╕рдордЭреМрддрд╛ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ? рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рд╣рдореЗрд╢рд╛ ред рдпрд╣ рдПрдХ рддрд░рд╣ рдХрд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдорд╣рд╛рди рднрд╛рд╖рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд░ рджреВрд╕рд░реЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдкреАрдЫреЗ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ (рдИрдПрд╕ рд╕рд╣рд┐рдд!), рдФрд░ рдЬрд┐рд╕рдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╡рд┐рдХрд╛рд╕ рдХреЗ рдПрдХ рдмрдбрд╝реЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХреНрд░рд╛рдВрддрд┐ рд▓рд╛ рджреА рд╣реИ, рдФрд░ рдЬрдм рдЗрд╕ "рд╕рд░рд▓" рд╕реБрд╡рд┐рдзрд╛ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ ( рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рджрд╕реНрдп рдХрдо рд╕реЗ рдХрдо рднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ), рд╣рдо рд╕реБрдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рддрдм рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ ES рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред

рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдПрдХ рддреНрд╡рд░рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЖрдЬ рдХреА TC39 рдмреИрдардХ рдореЗрдВ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЪрд░рдг 0 рд╕реЗ рдЪрд░рдг 1 рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдИ рд╣реИред

рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛: https://github.com/tc39/proposals/commit/cb447642290a55398d483f5b55fb7f973273c75d
рдмреИрдардХ рдХрд╛ рдПрдЬреЗрдВрдбрд╛: https://github.com/tc39/agendas/blob/master/2017/01.md

рд╡рд╛рд╣! рд╡рд╣ рддреЛ рд╡рд┐рд╢рд╛рд▓ рд╣реИ!

https://github.com/claudepache/es-Optional-chaining . рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд╛рдпрдХ рднреА

рдХреБрдЫ "рдЖрд╢реНрдЪрд░реНрдп" рдореИрдВ рдпрд╣рд╛рдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ (рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рдХрд┐ рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ, рдмрд╕ рдЪреАрдЬреЗрдВ рдЬреЛ рд╣рдо рд╢рд╛рдпрдж рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рдЕрдЧрд░ рд╣рдордиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рд╣реЛрддрд╛):

  • null рдПрдХ a?.b рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдирд╣реАрдВ рд╣реИ: рдЬрдм a null рд╣реИ рддреЛ рдпрд╣ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп undefined рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ
  • ~ рдЬрдВрдЬреАрд░ рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рдкреНрд░рд╕рд╛рд░: a?.b.c.d рдлреЗрдВрдХ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛ рдЕрдЧрд░ b рдФрд░ c рдЧреБрдг undefined рд╣реИрдВ ~ рд░рдпрд╛рди рдкрдврд╝ рдирд╣реАрдВ рд╕рдХрддрд╛
  • ~ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рдЪрд╛рд░: (a?.b).c рднреА рдирд╣реАрдВ рдлреЗрдВрдХреЗрдЧрд╛ рдпрджрд┐ b рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ ~ рд░рдпрд╛рди рдкрдврд╝ рдирд╣реАрдВ рд╕рдХрддрд╛
  • ~рдкреНрд░рдЪрд╛рд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдкрд░ рднреА рд╣реЛрддрд╛ рд╣реИ: a?.b.c().d undefined рд▓реМрдЯрд╛рдПрдЧрд╛ рдпрджрд┐ c рдЖрдордВрддреНрд░рдг null рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ ~ рд░рдпрд╛рди рдкрдврд╝ рдирд╣реАрдВ рд╕рдХрддрд╛
  • delete рдСрдкрд░реЗрдЯрд░ рд╕рдорд░реНрдерд┐рдд рд╣реИ
  • рдмреНрд░реИрдХреЗрдЯрд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ a?.[x] рд╕рдорд░реНрдерд┐рдд рд╣реИ
  • рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╕рд┐рдВрдЯреИрдХреНрд╕ func?.(...args) рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧреИрд░-рд╡рд┐рдзрд┐ рдХреЙрд▓ (!)

рдореБрдЭреЗ рдЕрдм рдФрд░ рдЪрд░рдг 2 рдХреЗ рдмреАрдЪ рдЙрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдЗрд╕реЗ рд╕рд╣реА рдкрд╛рдпрд╛ред

a?.bc рдлреЗрдВрдХрддрд╛ рд╣реИ рдпрджрд┐ b рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

a?() рдФрд░ a?[0] рджреЛрдиреЛрдВ рдЕрдЪреНрдЫреЗ рд╣реИрдВред

  • рдЬрдВрдЬреАрд░ рдмрд┐рдВрджреБрдУрдВ рдореЗрдВ рдкреНрд░рд╕рд╛рд░: a?.bcd рдирд╣реАрдВ рдлреЗрдВрдХреЗрдЧрд╛ рдпрджрд┐ b рдФрд░ c рдЧреБрдг рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИрдВ
  • рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рд╕рд╛рд░: рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ (a?.b).c рдирд╣реАрдВ рдлреЗрдВрдХреЗрдЧрд╛ рдпрджрд┐ b рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ
  • рд╡рд┐рдзрд┐ рдХреЙрд▓ рдкрд░ рднреА рдкреНрд░рдЪрд╛рд░ рд╣реЛрддрд╛ рд╣реИ: a?.bc().d рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ c рдЖрдордВрддреНрд░рдг рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ

рд╡реЗ рдмрд┐рдВрджреБ рдореБрдЭреЗ рд╕рдЯреАрдХ рдирд╣реАрдВ рд▓рдЧрддреЗред рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ:

a?.b.c().d      // undefined if a is null/undefined, a.b.c().d otherwise.
                // NB: If a is not null/undefined, and a.b is nevertheless undefined,
                //     short-circuiting does *not* apply

рд╡рд╛рд╣, рдореИрдВрдиреЗ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ред рдЖрдк рд╕рд╣реА рд╣реЗред рдЕрджреНрдпрддрди рдХрд░рдиреЗ

@algesten рдореВрд▓ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реЗ:

a?.()

b?.[0]

рдорд┐рдард╛рдИред рдСрдкрд░реЗрдЯрд░ рддрдм ?. рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдмрд╛рддрдЪреАрдд рд╣реЛ рд░рд╣реА рд╣реИ: https://github.com/estree/estree/issues/146

рдПрдХ рдЙрджреНрдзрд░рдг рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: ┬лрд╕рд╛рдзрд╛рд░рдг рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдПрдВ, рдФрд░ рдХрдард┐рди рдЪреАрдЬреЛрдВ рдХреЛ рд╕рдВрднрд╡ рдмрдирд╛рдПрдВ┬╗ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╢рд╛рдпрдж, рд╕рдмрд╕реЗ рдЖрдо рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░реЗрдВ, рдЬрдмрдХрд┐ рдЬрдЯрд┐рд▓/рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ (рдХрдо рд╕реЗ рдХрдо рд╢реБрд░реБрдЖрдд рдореЗрдВ), рдЬрдмрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рд▓рдВрдмреЗ (рдореМрдЬреВрджрд╛) рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде "рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред

рдХреЗрд╡рд▓ рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯреНрд╕

let a = b?.c?.d?.e;

рдкреНрд░рддрд┐:

let a;
try{
   a = b.c.d.e;
}catch(e){
   a = undefined;
}

@cedvdb рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╢рдмреНрджрд╛рд░реНрде - рдЧреЗрдЯрд░реНрд╕ рдореЗрдВ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рд╕рд╣рд╡рд╛рд╕ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирдирд╛ рдЪрд╛рд╣рд┐рдП

@RyanCavanaugh рд╣рд╛рдБ .. рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ред

рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд░рдбрд╛рд░ рдкрд░ рд╣реИ, рдпрд╛ TS рдЯреАрдо ES рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧреА?

рдпрд╣ рд╣рдорд╛рд░реА рдЫреЛрдЯреА рд╕реВрдЪреА рдореЗрдВ рд╣реИ; рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрднреА рднреА рдХреБрдЫ рдкреНрд░рд╢реНрди/рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдорд╣реАрдиреЗ рдореЗрдВ рдЗрд╕ рдкрд░ рдЖрдВрджреЛрд▓рди рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ @mhegazy рдХреА рдЯрд┐рдкреНрдкрдгреА рдХрд╣рд╛рдБ рд╕реЗ рдЖрдИ - TC39 рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдЦреБрд▓реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣рд╛рдБ рд╕рд╛рд░реНрдердХ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред null рдФрд░ undefined рдЗрдВрдЯрд░реИрдХреНрдЯ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреМрди рд╕рд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЪрд░рдг 2 рдПрдХ рдкреВрд░реНрдг рдиреНрдпреВрдирддрдо рдиреНрдпреВрдирддрдо рд╣реИ рдФрд░ рд╣рдо рд░рдирдЯрд╛рдЗрдо рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдкреНрд░рднрд╛рд╡ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЪрд░рдг 3 рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдВрдЧреЗред

рдХреНрдпрд╛ рдпрд╣ рдмрд╕ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

a == undefined ? expression : undefined

expression рдХрд╛ рдЕрд░реНрде рд╣реИ рдХреБрд▓реНрд╣рд╛рдбрд╝реА, a[x], a(x), delete рдпрд╣рд╛рдВ рднреА рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рддрдм a?.b?.[c]?.(d) рдЙрддреНрдкрдиреНрди рд╣реЛрдЧрд╛

a == undefined ? (a.b == undefined ? (a.b[c] == undefined ? a.b[c](d) : undefined) : undefined) : undefined

рд▓рдЧрддрд╛ рд╣реИ рд╕рднреА рд░рдпрд╛рди рдХреИрд╡рд╛рдиреЙрдШ рдХреЗ рд╢рд╛рд╕рди рд╕реЗ рдЧреБрдЬрд░реЗрдВрдЧреЗ


рдЕрдЧрд░ == рдСрдкрд░реЗрдЯрд░ рд╕реЗ рдирдлрд░рдд рд╣реИ, рддреЛ рдпрд╣ a === undefined || a === null . рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

@ zh99998 рдЖрдкрдХреЛ == рд╕реЗ рдирдлрд░рдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ '' рдФрд░ 0 рднреА рдмрд░рд╛рдмрд░ рд╣реИрдВред рдпрд╣ рд▓рдЧрднрдЧ рддрд░реНрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рд╡реНрдпрд╡рд╣рд╛рд░ (typeof value === 'object' || typeof value === 'function' || typeof value === 'symbol') && value !== null рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЕрдм рдЬрдЯрд┐рд▓ рд╣реЛ рд░рд╣реА рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ @RyanCavanaugh рдиреЗ рдХрд╣рд╛, рдЗрд╕рдХреЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП TC39 рдкреНрд░рд╕реНрддрд╛рд╡ рдХрдо рд╕реЗ рдХрдо рдЪрд░рдг 2 рдпрд╛ 3 рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ред

рдореБрдЭреЗ == рдХреЗрд╡рд▓ null рдФрд░ undefined рдХреЗ рдмрд░рд╛рдмрд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness

рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреНрд░реЛрдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд╛рд░рд┐рдд:

'' == undefined
false
0 == undefined
false

@kitsonk рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд╡рд▓ рдЕрд╢рдХреНрдд рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рдЕрдиреНрдп рдореВрд▓реНрдп рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рд╢реВрдиреНрдп рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЭреВрдареЗ рдореВрд▓реНрдпреЛрдВ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИрдВред 0 рдФрд░ "" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЭреВрдареЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрднреА рднреА рдЕрд╢рдХреНрдд рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

== рдХрд╛ рдорддрд▓рдм рдЬрдмрд░рджрд╕реНрддреА рд╣реИред null == 0 рдЭреВрдард╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреБрдЫ рднреА рд╢реВрдиреНрдп рдкрд░ рдордЬрдмреВрд░ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╣реА undefined == 0 рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

    if(!NaN) console.log("NaN is falsy") // NaN is falsy
    if(false == NaN) console.log("NaN coerces to false")
   else console.log("NaN doesn't coerce to false");// NaN doesn't coerce

рдЖрдкрдХреЛ рдЪрд┐рддреНрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред

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

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

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

const coalesce = (x: any, y: string) => x == null ? null : x[y];

const x = {
    y: {
        z: "Hello, World!!!"
    },
    f: () => "Foo!",
    a: ["Array!"]
};

// x?.y?.z
const value1 = coalesce(coalesce(x, 'y'), 'z');

// x?.f()
const value2 = coalesce(x, 'f')()

// x?.a[0]
const value3 = coalesce(x, 'a')[0]

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ "рдХреЛрд▓реЗрд╕" рдирд╛рдордХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реИрд╢реНрд╡рд┐рдХ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рдХрд┐рд╕реА рднреА рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдореЗрдВ рд╕реАрдзреЗ рдЗрдирд▓рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЗрд╕реЗ рдПрдХ рдирд╛рдо рджреЗрддреЗ рд╣реБрдП рдмреНрд▓реЛрдЯ рдореЗрдВ рдХрдЯреМрддреА рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмрд╣реБрдд рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдпрд╛ рдпрджрд┐ рднрд╛рд╖рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ рдорд╛рдирдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдмрд╕ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдореИрдВ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

рдпрд╣ ?? рдСрдкрд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рднреА рд╕рд╛рдордиреЗ рд▓рд╛рддрд╛ рд╣реИред C# рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рднреА null рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЬреЛ рдХреБрдЫ рднреА рджрд╛рдИрдВ рдУрд░ рд╣реИ рдЙрд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред

string x = null ?? "Hello";
````

In JavaScript, it is more idiomatic to use `||` to replace "falsey" values with the value on the right. 

```javascript
var x = null || "Hello";

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдЪреНрдЪрд╛рдИ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ ( 0 , false , рдЖрджрд┐) рдХреЛ рдкрдХрдбрд╝ рд▓реЗрддреА рд╣реИред рдПрдХ рдирд▓ рдХреЛрд▓реЗрд╕ ( ?. ), рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛, рдЖрдк null -ness рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

const x = { y: "" };
const result1 = x?.y || "default";  // I'd expect "default"
const result2 = x?.y ?? "default";  // I'd expect "" 

@jehugaleahsa , рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХреЛрд▓реЗрд╕ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдФрд░ рд╕рджрд╕реНрдп рдкрд╣реБрдВрдЪ рдХреЛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЪреЗрдХ рд╢реВрдиреНрдп рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реЛред x?.f() рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрджрд┐ x рд╢реВрдиреНрдп рд╣реИ рддреЛ f рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@bschlenk рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ null is not a function рдЬреИрд╕реЗ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рдКрдкрд░ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

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

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ idx рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ , рдЬреЛ ?. рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдХрд╛рдлреА рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдирд┐рдпреЛрдЬрд┐рдд рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рднреА рдЕрдирджреЗрдЦрд╛ рдХрд░рддрд╛ рд╣реИред рд╡реИрд╕реЗ рднреА, рдХрдВрдкрд╛рдЗрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕реНрдкреЗрдХреНрд╕ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рд░реБрдЪрд┐рдХрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рд╕рд╛рдорд╛рди рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

TS рдРрд╕рд╛ рдХреБрдЫ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдо рдпрд╣рд╛рдВ рдпрд╣реА рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдХрдИ рдмрд╛рд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ TS рдХреЛ рддрдм рддрдХ рдСрдкрд░реЗрдЯрд░ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ ES рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдХ рджрд┐рд╢рд╛ рдпрд╛ рджреВрд╕рд░реА рджрд┐рд╢рд╛ рдореЗрдВ рдирд╣реАрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ред

рдпрд╣ рд╢рдмреНрджрд╛рд░реНрде рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЕрднреА рднреА рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдВрдд рд░рд╣реЗрдВ рд╣рдо рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ рдФрд░ || рдФрд░ ? ... : ... рдХреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдФрд░ 100 рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ @noppa рдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рдХрд┐ рд╣рдо ES рдпреБрдХреНрддрд┐ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

https://github.com/babel/babel/pull/5813 (рдмреЗрдмреАрд▓реЛрди рдкреАрдЖрд░ рдХреЗ рд╕рд╛рде) рдХреЛ рдЕрднреА рдмрд╛рдмреЗрд▓ рдХреЗ preset-stage-1 рдореЗрдВ рдорд┐рд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд▓реНрдкрдирд╛ рдЕрднреА рднреА рдЪрд░рдг 1 рдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ tc39 рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд▓рд┐рдВрдХ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ: https://github.com/tc39/proposal-Optional-chaining

FYI рдХрд░реЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдЦрдВрд▓рд╛ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ TC39 рдкрд░ рд╣реЛрдЧреА https://github.com/tc39/agendas/blob/master/2017/07.md

@jehugaleahsa рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВ рдФрд░ рдореИрдВ рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ TC39 рдкрд░ ?? рдкреЗрд╢ рдХрд░реВрдБрдЧрд╛ред рдЖрдк рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://github.com/gisenberg/proposal-nullary-coalescing

рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдЦрдВрд▓рд╛ рдХреЛ TC39 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛... рдлреИрд╕рд▓рд╛ рдХреНрдпрд╛ рдерд╛?
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛

@markwhitfeld рдиреЛрдЯреНрд╕ рд╕рд╛рд░рд╛рдВрд╢ рд╕реЗ:
рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░реНрд╕: рд╕реНрдЯреЗрдЬ 1 рдкрд░ рдмрдиреЗ рд╣реБрдП рд╣реИрдВ, рдмрд╛рдж рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдФрд░ рдлреАрдбрдмреИрдХ рдХреЗ рдЬрд╡рд╛рдмреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖрдПрдВрдЧреЗред

рдпрд╣рд╛рдВ рдкреВрд░реНрдг рдиреЛрдЯреНрд╕: https://github.com/rwaldron/tc39-notes/blob/master/es8/2017-07/jul-27.md#13iia -Optional-chaining-operator

рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрднреА рднреА рдЦреБрд▓реЗ рдкреНрд░рд╢реНрди рд╣реИрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рддрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗред

рдЙрди рдиреЛрдЯреЛрдВ рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд┐рддрд┐ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╡рд┐рдХрд▓реНрдк рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗ рдЙрди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЧрдП рд╣реЛрдВрдЧреЗ рдЬрд┐рди рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реЗ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рдереЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдореИрдВ рд╕рдЦреНрдд рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рддрдм рддрдХ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред

рдореБрдЭреЗ рдмрд╣реБрдд рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рд╡рд┐рдХрд▓реНрдк 2/4 рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВрдЧреЗ (рдЬреЛ рд╡реИрд╕реЗ рднреА рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рд╣реИ)ред

15 рдЬреБрд▓рд╛рдИ 2014 - 4 рд╕рд┐рддрдВрдмрд░ 2017, рдЕрднреА рдХреБрдЫ рдирд╣реАрдВ

@frankfvb рдЖрдкрдиреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИред

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

рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХ рд╕рдорд┐рддрд┐ рдХреА рдкрд┐рдЫрд▓реА рдмреИрдардХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рд╕реНрддрд╛рд╡ рдЪрд░рдг 1 рдкрд░ рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдореМрд▓рд┐рдХ рдкреНрд░рд╢реНрди рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдмрдХрд┐ рдПрдХ рдХрдард┐рди рдФрд░ рддреЗрдЬрд╝ рдирд┐рдпрдо рдирд╣реАрдВ рд╣реИ, рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рдЪрд░рдг 3 рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред рдпрд╣ рдХрднреА-рдХрднреА рдЪрд░рдг 2 рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╣рддреНрд╡ рдХрд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд▓реЛрдЧ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рдЫреЛрдЯреА рд╕реВрдЪреА рдореЗрдВ рд╣реИред рд╣рдо рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЖрдо рд╕рд╣рдорддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП TC39 рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрдиреЗ рдФрд░ рдлрд┐рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рд╕реЗ рдирдлрд░рдд рдХрд░реЗрдВрдЧреЗред

рдпрд╣ TC39 рдЪрд░реНрдЪрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕реВрддреНрд░ рдирд╣реАрдВ рд╣реИ

рдпрджрд┐ рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ , рддреЛ рдЙрдЪрд┐рдд рд╕реНрдерд╛рди рдкрд░ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ ред рдореЗрд░реА рднреА рд░рд╛рдп рд╣реИ рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рдЫреЛрдбрд╝рдиреЗ рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдореЗрд░реА рд╡рд░реНрддрдорд╛рди рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдВрдХ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдирд╛рдо рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдХрд┐рд╕реА рддрддреНрд╡ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдПрд▓реНрд╡рд┐рд╕ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд▓реЙрд╢/рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╣реИ, рддреЛ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА _.get(Book, 'author.name.firstName') рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╣ рдХрд░реЗрдЧрд╛ рдЬреЛ рдпрд╣ рдЪрд╛рд╣рддрд╛ рд╣реИ

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: _.get() рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд░ рдХреЗ рдореБрджреНрджреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдмреБрд░реА рд╕рд▓рд╛рд╣ рд╣реИред рдиреАрдЪреЗ рдХрдореЗрдВрдЯ рджреЗрдЦреЗрдВ

@tolgaek , _.get рдореЗрдВ рдЦрд░рд╛рдм рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕ рдмреЗрд╣рддрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде (рд▓реЗрдЦрдХреЛрдВ рдХреА рд╡рдЬрд╣ рд╕реЗ рдЕрднреА рддрдХ рд╡рд┐рд▓рдп рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ ) рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рддрднреА рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рд╡рд╕реНрддреБ рдХреА рдЧрд╣рд░рд╛рдИ 1 рд╣реЛ, рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ any рд╣реИ

рджреВрд╕рд░реА рдУрд░ рдПрд▓реНрд╡рд┐рд╕ рдСрдкрд░реЗрдЯрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рд╕реА рднреА рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдПрд▓реНрд╡рд┐рд╕ рдСрдкрд░реЗрдЯрд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдУрд╣ рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛ рдереАред рдзрдиреНрдпрд╡рд╛рдж @BjornMelgaard

@mhegazy рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдлреАрдЪрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдПрд▓реНрд╡рд┐рд╕ рдЗрддрдиреЗ рд▓рдВрдмреЗ рдЗрдВрддрдЬрд╛рд░ рд╕реЗ рдЦреБрд╢ рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣ Babel7 рдореЗрдВ рдЙрддрд░рд╛ рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ, рд╣рдо рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ.. рдХреЛрдИ рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдХрд░реЗрдВред
:)

@ рдЬреАрдПрд╕-рдЕрдЦрд╛рди рдмреИрдмреЗрд▓ рдкреНрд▓рдЧрдЗрди рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рддрдм рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реБрдП рд╣реИрдВ (рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╕рд╣рд┐рдд), рдФрд░ рдлреАрдЪрд░ рдХреЗ рдЪрд░рдг 2 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЕрдзрд┐рдХ рдмрджрд▓рд╛рд╡ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ (рд╕реНрдЯреЗрдЬ 3 рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ), рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдмреИрдмреЗрд▓ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рдХреЛрдб рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрд╡рд┐рдзрд╛ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рдкреНрд▓рдЧрдЗрди рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдмреИрдмрд▓ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдЦрдХ рдФрд░ рдЕрдиреНрдп рдЗрдЪреНрдЫреБрдХ рдкрдХреНрд╖ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХреЗрдВред рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдмреИрдмреЗрд▓ рдиреЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд▓рд╛рдЧреВ рдХреА рд╣реИ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмреНрд░реЗрдХрд┐рдВрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

@alangpierce рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж

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

рдХрд▓реНрдкрдирд╛ рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рддрдХ рдЗрд╕ рдЯрд┐рдХрдЯ рдХреЛ рд▓реЙрдХ (рдмрдВрдж рдирд╣реАрдВ) рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпреБрдХреНрддрд┐ рдХрдм рддреИрдпрд╛рд░ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИ?

@oliverjanik рд╡рд░реНрддрдорд╛рди рдорд╕реМрджрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд▓реА TC39 рдореАрдЯрд┐рдВрдЧ (9/26-9/28) рдореЗрдВ рдЪрд░рдг 2 рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдЬреЗрдВрдбрд╛ рдЖрдЗрдЯрдо рд╣реИред рдореИрдВ рдЙрд╕ рд╕рдордп рдпреЗ рд╕реНрд▓рд╛рдЗрдбреНрд╕ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЬреЛ рд▓реЛрдЧ рдЬрд▓реНрджреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреГрдкрдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд░реЗрдкреЛ рдкрд░ рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░реЗрдВред

рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП @gisenberg рдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░рд╛рдВрд╢ рд╕реНрд▓рд╛рдЗрдб рдбреЗрдХ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕реЗ рдЯреАрд╕реА39 рдореАрдЯрд┐рдВрдЧ рдореЗрдВ рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рдЕрджреНрднреБрдд рдХрд╛рд░реНрдп!
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреНрдп рдЪреАрдЬ рдЬреЛ TC39 рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк (рдФрд░ рд╕реНрд▓рд╛рдЗрдб рдбреЗрдХ) рдХреЗ рд▓рд┐рдП рдлрд╛рдпрджреЗрдордВрдж рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╡рд╣ рд╣реИ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рджреЗрдЦрдирд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд░рдЦрдиреЗ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред
рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреЗ рд▓рд┐рдП рд╢реБрднрдХрд╛рдордирд╛рдПрдБ !!!

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рд╖рдп рд╕реЗ рдереЛрдбрд╝рд╛ рд╣рдЯрдХрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдлреНрд▓реЛ рдореЗрдВ рдЕрдм рд╕реБрд░рдХреНрд╖рд┐рдд рдЧреЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреИрд╕реЗ _.get рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдЙрджрд╛рд╣рд░рдг: Flowtype.org/try

рдХреЛрдб рдХрд╛ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдЯреБрдХрдбрд╝рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрд╣ рдЕрд╢рдХреНрдд рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рдмреАрдЪ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

AFAIK рдПрдХрдорд╛рддреНрд░ рдЪреАрдЬ рдЬреЛ рдЯреАрдПрд╕ рд╕реЗ рдЧрд╛рдпрдм рд╣реИ, рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╣ $NonMaybeType рдЬреИрд╕рд╛ рдХреБрдЫ рд╣реИред
рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреВрд░ рдХрд░реЗрдЧрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫрд╛ рдерд╛ред

рдмреНрд░реИрдХреЗрдЯ рдмрдирд╛рдо рдбреЙрдЯ рдмрдирд╛рдо рдХреЙрд▓ рдПрдХреНрд╕реЗрд╕ рдФрд░ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдирд╡реАрдирддрдо TC39 рдмреИрдардХ рдореЗрдВ рд╕реНрдЯреЗрдЬ 2 рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдкрд╛рдпрд╛ ( undefined / null рдХреЗ рджрд╛рдИрдВ рдУрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рдЖрд╕рдкрд╛рд╕ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА x.?b() рдЬрдм x.b рдПрдХ number рд╣реИ)

(рд╡реЛрдЯ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдкрд░ рд╕рдбрд╝реЗ рд╣реБрдП рдлрд▓ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП)

рд╣рдорд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдпреЗ рдзрдиреНрдпрд╡рд╛рджред рдХреНрдпрд╛ рдирд┐рддрдВрдм рд╣реИрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджрд╛рдпрд░реЗ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ?

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджрд╛рдпрд░реЗ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрд╕рд╛рди рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИ?

рдпрд╣ рд╡рд╣ рдЪреБрдиреМрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ TC39 рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдмрдХрд┐ рдореБрдЭреЗ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рд▓реЛрдЧ рдЗрд╕рд╕реЗ рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╕реНрддрд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рднрд╛рд╖рд╛ рдХреА рдХрдордЬреЛрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдХрд╛рд░рдг рдмрди рд░рд╣реА рд╣реИ, рдпрд╛ рдЖрдкрдХреЛ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣реИ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП 90% рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ ┬п\_(уГД)_/┬п рд╢реЗрд╖ 10% рдХреЗ рд▓рд┐рдП рд╡реИрдз рдХреЛрдб рд╣реИред

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

рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░реЗрдВ рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ TC39 рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм ES рдХреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд-рдПрдирдПрд╡реА рдСрдкрд░реЗрдЯрд░ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдВрдЧреЗ: рдПрдХ рдЪрдордХрджрд╛рд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдЬреЛ ES рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЬреЛ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА "рдкреНрд░рдХрд╛рд░" рдХреЗ рд╕рд╛рде рдЯреАрдПрд╕ рд╕реБрд░рдХреНрд╖рд┐рдд-рдПрдирдПрд╡реА рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдареАрдХ рд╣реИред

@notsnotso рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЗрдПрд╕ рдХреЛ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдХреЙрдлреАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╣реА рд╣реИред

рд╢рд╛рдпрдж рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ:

  • рдмрд╣реБрдд рд╕рд░рд▓ рд▓рд╛рдЧреВ рдХрд░реЗрдВ? рдЕрдзреАрд░ рджреЗрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░, рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд╕реБрд╡рд┐рдзрд╛ (рдЬреИрд╕реЗ рдбреЗрдХреЛрд░реЗрдЯрд░) рдХреЗ рд░реВрдк рдореЗрдВ, рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде - рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛
  • рдПрдХ рдФрд░ 3 рд╕рд╛рд▓ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рд╕реНрдЯреИрдВрдбрдЖрд░реНрдЯ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдЧреИрд░-рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд▓рд┐рдЦреЗрдВ, рдХреНрдпрд╛ рддреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐, рд╕реНрдерд┐рд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрдм рд▓реЛрдЧ рдирдП рдСрдкрд░реЗрдЯрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВрдЧреЗред
    "рдЗрд╕реЗ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд░реЗрдВ, рдЬреЛ рдХреБрдЫ рднреА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реИ" рдХреЛрдИ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ 3 рд╕рд╛рд▓ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛, рдХрд┐ ts рдПрд▓реНрд╡рд┐рд╕ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЬреЗрдПрд╕ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдпрд╣ рдирд╣реАрдВ рд╣реБрдЖред рдореЗрд░реЗ рдореВрд▓ рдореЗрдВ
рдкреЛрд╕реНрдЯ, рдореИрдВрдиреЗ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛ред
рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ ?. рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддрд╛ рд╣реВрдВ, рдЙрддрдирд╛ рд╣реА рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ undefined рд╣реИред

рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрдЬрд╛рдп рдмрд╣реБрдд рдХреБрдЫ рдХрд░реВрдВрдЧрд╛
рдФрд░ рдЕрдзрд┐рдХред рдПрдХ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЗрдирд▓рд╛рдЗрди try/catch . рдЬреИрд╕рд╛ рдХреБрдЫ рдерд╛
рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ( let x = try a.b.c else 0 ) рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдХрд┐
"рдЭреВрдареА" рдХреЗ рдмрдЬрд╛рдп "рдирд▓реА" (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, x ?? 1) рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдЙрджрд╛., x || 1)ред
рддреЛ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВрдЧреЗ: try a.b.c ?? 0 else 0 ред рдпрд╣ рдЪрд┐рдВрддрд╛рдЬрдирдХ рд╣реИ, рд╣рд╛рдБ,
рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХрд╣рддрд╛ рд╣реИ: рдПрдмреАрд╕реА рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо null рд╣реИ рдпрд╛
undefined , рд╡рд╛рдкрд╕реА 0. рдпрджрд┐ a рдпрд╛ b undefined рд╣реИ рдФрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ,
рдЗрд╕реЗ рдкрдХрдбрд╝реЗрдВ рдФрд░ 0 рд▓реМрдЯрд╛рдПрдВред

рдПрдХ рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ else рдХреНрд▓реЙрдЬ рдХреЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
undefined ред рддрдм рдЖрдк рд╡реНрдпрдВрдЬрдХ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ: let x= (try a.b.c) ?? 0 ред рдпрд╣ рдХрд╛рдлреА рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реИ, рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рд╕рдорд╛рдзрд╛рди рдЬреЛ рдЕрдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреЛрд░ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдореИрдВ рдмрд╕ рдЗрддрдирд╛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ
?. рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдФрд░ рдЬрдм рддрдХ рд╣рдо
рд╡рд╣ рдЦреЛрдЬреЗрдВ рдЬреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реЛред

рдЧреБрд░реБ, 5 рдЕрдХреНрдЯреВрдмрд░, 2017 рдХреЛ рд╕реБрдмрд╣ 7:51 рдмрдЬреЗ, рджрд┐рдорд┐рддреНрд░реА рд░рд╛рдбрдХреЛрд╡рд╕реНрдХреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@notsnotso рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЗрдПрд╕ рдХреЛ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣реА рд╣реИ
рдХреЙрдлрд╝реАрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/Microsoft/TypeScript/issues/16#issuecomment-334441781 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABTgPilbZfuKc2egdBrYfdTHHeDl3F6Sks5spMLLgaJpZM4CNapf
.

@zlumer рдЕрдЪреНрдЫрд╛ рдордЬрд╛рдХред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдПрдХ рдЯреАрдПрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝реЗрдЧреАред

@jehugaleahsa рдореБрдЭреЗ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╕рдВрдж рд╣реИ, рдФрд░ рдпрд╣ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯреАрдПрд╕ рдХреЗ рд▓рд┐рдП рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЬрдм рддрдХ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рдордЬрдмреВрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реВрдВред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдХрдХреНрд╖рд╛рдПрдВ, рдореЙрдбреНрдпреВрд▓, рд▓реИрдореНрдмрдбрд╛ рдЬреЛрдбрд╝реЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдШреЛрд╖рд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЬреЗрдПрд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдерд╛/рд╣реИред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдирд┐рд╕реНрд╕рдВрджреЗрд╣ рд╕рдорд┐рддрд┐ рдореЗрдВ рдЗрди рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред

рдЬрдм рд╕рдорд┐рддрд┐ рдЕрдВрддрддрдГ рдПрдХ рдЕрд▓рдЧ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛рддреА рд╣реИ, рддреЛ рдЖрдк рд▓реЛрдЧ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЛ рддреИрдпрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЗрддрдиреА рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реИред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП async/рдкреНрд░рддреАрдХреНрд╖рд╛ рднреА рдкреЗрд╢ рдХреА рдЧрдИ рдереАред

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдПрдХ рдЯреАрдПрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝реЗрдЧреАред

"TS рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛" рдЬреИрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреГрдкрдпрд╛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рд▓рдХреНрд╖реНрдп рджреЗрдЦреЗрдВред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ ES рдХреЗ рдЙрдЬреНрдЬреНрд╡рд▓ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ, рдХреБрдЫ рдореМрдЬреВрджрд╛ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ,рдЙрдиреНрд╣реЗрдВ рд╕рд┐рд░реНрдл рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЕрдкрдирд╛ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рд╕реЗ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдХрдХреНрд╖рд╛рдПрдВ, рдореЙрдбреНрдпреВрд▓, рд▓реИрдореНрдмрдбрд╛ рдЬреЛрдбрд╝реЗред

рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдПрдХ рдмрдбрд╝реА рдкрд░рд╛рдЬрдп рд╣реИ рдЬреЛ рдЕрднреА рднреА рднреНрд░рдо рдХрд╛ рдХреЛрдИ рдЕрдВрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреАрдо рдиреЗ _рдЧрд▓рддреА_ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдмрдВрджреВрдХ рдХреЛ рдмрд╣реБрдд рдЬрд▓реНрджреА рдХреВрджрдирд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рднреА рдЖ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдлрд┐рд░ рд╕реЗ, рдореИрдВ рдкрд┐рдЫрд▓реЗ 5 рд╡рд░реНрд╖реЛрдВ рд╕реЗ private рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реВрдВ рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреНрд░рдо рдХрд╛ рдХреЛрдИ рдЕрдВрдд рдирд╣реАрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

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

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП async/рдкреНрд░рддреАрдХреНрд╖рд╛ рднреА рдкреЗрд╢ рдХреА рдЧрдИ рдереАред

рдПрдХ рдмрд╛рд░ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕реНрдЯреЗрдЬ 3 рдкрд░ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ред

рдХреЛрдИ рднреА рдЧрд▓рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдмрд╛рддрдЪреАрдд рдХрд╣реАрдВ рднреА рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдордВрдбрд▓рд┐рдпреЛрдВ рдореЗрдВ (рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХреЛрдИ рдЭрдВрдбрд╛ рдерд╛? рд╣рд╛рдВ рд╣рдо рдЭрдВрдбреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ) рдпрд╛ рдСрдл-рд╡рд┐рд╖рдп (рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЯреАрдПрд╕ рдЬреЗрдПрд╕ рдмрдирдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ? рдирд╣реАрдВ рдкрд╛рдВрдЪ рд╕рд╛рд▓ рдмрд╛рдж рд╣рдо рдирд╣реАрдВ рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕ рдкрд░ рд╣рдорд╛рд░рд╛ рджрд┐рдорд╛рдЧ), рд╣рдореЗрдВ рдЗрд╕реЗ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рд▓рдЧрднрдЧ 3 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдЙрд╕реА рд╕рдордп рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ рдЬрдм ES рд╕рдорд┐рддрд┐ рдЗрд╕рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдЧреАред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдкреНрд░рд╕реНрддрд╛рд╡ рд░реЗрдкреЛ https://github.com/tc39/proposal-Optional-chaining рд╣реИ рдФрд░ рдЖрдк рд╡рд╣рд╛рдВ рдЗрд╕рдХреА рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЕрдЧрд▓реА TC39 рдмреИрдардХ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдлрд╝рд▓рд╛рдЗрди рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рднреА рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдЕрдкрдбреЗрдЯ: рд╣рдо рдЖрдЬ рджреЛрдкрд╣рд░ TC39 рдкрд░ рд╕реНрдЯреЗрдЬ 2 рдкрд░ рдкрд╣реБрдБрдЪреЗ !!!

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЪрд░рдг 3 рд╣реИ

рдХреЗрд╡рд▓ рдЬрд╢реНрди рдордирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЕрдирд▓реЙрдХ рдХрд░рдирд╛

рд╣реБрд░реНрд░реЗ!

рд╕реНрдкреИрдо рди рдХрд░реЗрдВ...

рдЖрдк рдЕрдкрдиреА рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЗрдореЛрдЬреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ

рд╕реНрдкреИрдо рди рдХрд░реЗрдВ...

рдЖрдк рдЕрдкрдиреА рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЗрдореЛрдЬреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ

рд╕рд╛рде рд╣реА, рдЗрдореЛрдЬреА рдХрд╛рдЙрдВрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЪрдврд╝рддреЗ рд╣реБрдП рджреЗрдЦрдирд╛ рдордЬрд╝реЗрджрд╛рд░ рд╣реИред рдореИрдВрдиреЗ рдХрднреА рдХрд┐рд╕реА рдореБрджреНрджреЗ рдХреЛ рдЗрддрдиреА рддреЗрдЬреА рд╕реЗ рдЗрддрдиреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рддреЗ рд╣реБрдП рдирд╣реАрдВ рджреЗрдЦрд╛!

рдореИрдВрдиреЗ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдЕрдкрдбреЗрдЯ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡реАрдбрд┐рдпреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд┐рдпрд╛ рд╣реИ https://youtu.be/JLBrgPjeGhc

рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдЗрд╕ рдЪреАрдЬрд╝ рд╕реЗ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@DanielRosenwasser рдпрджрд┐ рдЖрдк рдордЬрд╝рд╛рдХ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдФрд░ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдХреИрд╕реЗ, рдЖрдк рджрд╛рд╣рд┐рдиреЗ рд╕рд╛рдЗрдбрдмрд╛рд░ рдореЗрдВ рдЗрд╕ рдмрдЯрди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

image

рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдИрдореЗрд▓ рдореЗрдВ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ:

image

рдпрд╣ рдПрдХ рдордЬрд╛рдХ рдерд╛, рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

@RyanCavanaugh рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж:
martian

рдпрд╣ рдЕрдВрдд рдореЗрдВ рдЬрдореАрди рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрддреНрд╕рд╛рд╣рд┐рдд! рдореИрдВ

рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ VSCode рдХреЗ рддреНрд╡рд░рд┐рдд рд╕реБрдзрд╛рд░ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛

image

рдореИрдВ @RyanCavanaugh рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╢рд╛рдпрдж рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдореИрдВ рдХрдареЛрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ! (рдФрд░ @DanielRosenwasser рдЕрдЪреНрдЫреЗ рдЙрдкрд╛рдп рдХреЗ рд▓рд┐рдП)

@kitsonk рдЧрдзреЗ рдордд рдмрдиреЛред рд▓реЛрдЧ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкрд░реЗрд╢рд╛рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред

@kitsonk , рд░рдпрд╛рди рдХреИрд╡рдиреБрдШ рдпрд╛ рдбреИрдирд┐рдпрд▓ рд░реЛрд╕реЗрдирд╡рд╛рд╕рд░ рдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреА рдЬрд╛рдПрдЧреА? рд░рдпрд╛рди рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд┐рдпрд╛ рдФрд░ рдбреИрдирд┐рдпрд▓ рдиреЗ рдЖрдкрдХреЗ рдКрдкрд░ рддреАрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ред

рднрд▓реЗ рд╣реА рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреА рд╣реЛ, рдЙрдиреНрд╣реЗрдВ рд╕реНрдкреИрдорд┐рдВрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдердХрд╛рди рдкреИрджрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ GitHub рд╡реНрдпрдВрдЧреНрдпрд╛рддреНрдордХ рд╣рд╛рд╕реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рднрдпрд╛рдирдХ рдЬрдЧрд╣ рд╣реИ, рдЬреА ...

рдЗрд╕ рдирдИ рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдШрдЯрд┐рдпрд╛ рд╡рд┐рд╡рд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП TC39 рдореЗрдВ рд╣рдорд╛рд░реЗ рдЪреИрдВрдкрд┐рдпрди рдХрд╛ рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

thanks

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @kitsonk рдмрд╕ рдордЬрд╛рдХ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЬреИрд╕реЗ рдореИрдВ рдерд╛ред рдЬрдмрдХрд┐ рд╣рдо рдЙрддреНрддреЗрдЬрдирд╛ рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдереЛрдбрд╝реЗ рдореВрд░реНрдЦ рд╣реИрдВ, рдпрд╣ рд╕реАрдУрд╕реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЪреАрдЬреЛрдВ рдХреЛ рд╕рднреНрдп рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реМрдореНрдп рдЕрдиреБрд╕реНрдорд╛рд░рдХ рд╣реИред

@DanielRosenwasser
рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рдкрд░ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ? рдпрд╛ @rbuckton рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╢рд╛рдЦрд╛ рдореМрдЬреВрдж рд╣реИ тАНтЩВя╕П


рдареАрдХ рд╣реИ рдореБрдЭреЗ рдорд┐рд▓ рдЧрдпрд╛ https://github.com/microsoft/TypeScript/commits/OptionalChainingStage1 ЁЯджЁЯП╗тАНтЩВя╕П

рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред

рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ 5 рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рд╣реИред :рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд:

@rbuckton

рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реИ, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗред

рдХреНрдпрд╛ рдореИрдВ рдЗрд╕ рдкрд░ рдПрдХ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ @jhpratt @MatthiasKunnen рдореИрдВ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рд╣рдо рд╕рднреА GitHub рдкрд░ рд╕рдорд╛рди рд╕рдВрджрд░реНрдн рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЗрдзрд░-рдЙрдзрд░ рдЙрдЫрд▓ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд░рдпрд╛рди рдФрд░ рдбреИрдирд┐рдпрд▓ рдЖрдИрдЖрд░рдПрд▓ рдХреЗ рд╕рд╛рде рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ рдФрд░ рд╣рд╛рд▓ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рдЬрд┐рд╕рдиреЗ рдордЬрд╛рдХ рдХреЗ рдЕрдВрджрд░ рдореЗрд░реА рдЧрд▓рддрдлрд╣рдореА рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ред рдХреНрд╖рдорд╛ рдпрд╛рдЪрдирд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдкреВрд░рд╛ рдореБрджреНрджрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкреБрд░рд╛рддрддреНрд╡ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд░рдпрд╛рди рдиреЗ рдЗрд╕реЗ рдРрд╕реЗ рд╕рдордп рдореЗрдВ рдЙрдард╛рдпрд╛ рдЬрд╣рд╛рдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ _might_ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдИрд╕реАрдПрдордПрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкреВрд░реНрд╡-рджрд┐рдирд╛рдВрдХрд┐рдд рдЧрдВрднреАрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдпрд╣ рдЙрд╕ рд╕рдордп рдХреЗ рдЖрд╕рдкрд╛рд╕ рдерд╛ рдЬрдм рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ ES2015 рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╕рдмрдХ рд╕реАрдЦ рд░рд╣рд╛ рдерд╛ рдЬреЛ рднрд╛рд╖рд╛ рдкрд░ рдЧрдВрднреАрд░ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓ рд░рд╣реЗ рдереЗред рдЯреАрдо рдиреЗ рддрдм рддрдХ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬрдм рддрдХ рдХрд┐ TC39 рд╕реНрдЯреЗрдЬ 3 рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рдерд╛ред

рдЬрдмрдХрд┐ @RyanCavanaugh рдЗрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЬреЛ рд╣реБрдЖ рд╣реИ, рдЙрд╕рдХреЗ рдХрд░реАрдм рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдХрд┐ 2014 рдореЗрдВ рдЯреАрдо рдиреЗ рдЬреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реЛрдЧрд╛ рд╡рд╣ рд╡рд░реНрддрдорд╛рди рдЪрд░рдг 3 рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде 100% рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред . рдЗрд╕рд▓рд┐рдП рдЬрдм рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЙрддреНрд╕рд╡ рд╣реИ, рддреЛ рдпрд╣ рднреА рдЖрднрд╛рд░реА рд░рд╣реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 5 рд╕рд╛рд▓ рдХрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдирд╣реАрдВ рд╣реИ рдЬреЛ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╣реИ рдЬреЛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

ЁЯЩП

westwing

рдХреНрдпрд╛ рдпрд╣ рд╡реЗрдЯрд┐рдВрдЧ рдлреЙрд░ TC39 рд▓реЗрдмрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ? рдореИрдВ

рдХреНрдпрд╛ рдпрд╣ рд╡реЗрдЯрд┐рдВрдЧ рдлреЙрд░ TC39 рд▓реЗрдмрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ? рдореИрдВ

рдФрд░ ship-it . рдЬреЛрдбрд╝реЗрдВ

рд╡рд╛рд╣

рдЖрдЦрд┐рд░рдХрд╛рд░ред рд╕рдЪрдореБрдЪ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ y'day рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫ рд░рд╣рд╛ рдерд╛, рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЪрд░рдг 3 рдХрдм рд╣реЛрдЧрд╛, рдФрд░ рдмрдо! рдЙрди рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗ!

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдХреИрд╕реЗ рдореНрдпреВрдЯ рдХрд░реЗрдВ? :)

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

image

image

рдХреЛрдИ рдЙрддреНрд╕рд░реНрдЬрди рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ?
рдРрд╕рд╛ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

function __chain<T extends object, U>(value: T|null|undefined, callback: (value: T) => U): U|undefined {
    if (value !== null && value !== undefined) {
        return callback(value);
    }

    return undefined;
}

type Foo = { x?: { y?: { z?: () => number } } }

const foo: Foo|null = { }

// foo?.x?.y?.z?()
const value = __chain(foo, _a => __chain(_a.x, _b => __chain(_b.y, _c => __chain(_c.z, _d => _d()))));

рдореИрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмреЗрдмреЗрд▓ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЛрдк рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ:

var _foo, _foo$x, _foo$x$y, _foo$x$y$z;

// foo?.x?.y?.z?.()
(_foo = foo) === null || _foo === void 0 ? void 0
    : (_foo$x = _foo.x) === null || _foo$x === void 0 ? void 0
    : (_foo$x$y = _foo$x.y) === null || _foo$x$y === void 0 ? void 0
    : (_foo$x$y$z = _foo$x$y.z) === null || _foo$x$y$z === void 0 ? void 0
    : _foo$x$y$z.call(_foo$x$y);

рдореИрдВ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдмреЗрдмреЗрд▓ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЛрдк рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ:

var _foo, _foo$x, _foo$x$y, _foo$x$y$z;

// foo?.x?.y?.z?.()
(_foo = foo) === null || _foo === void 0 ? void 0
  : (_foo$x = _foo.x) === null || _foo$x === void 0 ? void 0
  : (_foo$x$y = _foo$x.y) === null || _foo$x$y === void 0 ? void 0
  : (_foo$x$y$z = _foo$x$y.z) === null || _foo$x$y$z === void 0 ? void 0
  : _foo$x$y$z.call(_foo$x$y);

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, @ рдПрдХреНрд╕рдИ-рдмреЙрд╕ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдХреЛрдк рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЖрджрд░реНрд╢ рд╣реИ (рднрд▓реЗ рд╣реА рдпрд╣ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд╕реВрд░рдд рдмрдирд╛ рджреЗ)

рдЬрдм рд╣рдо рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рддреЛ ES рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдкрд╛рд▓рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрдардиреАрдпрддрд╛ рдкрд░ рдЬреАрдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмреЗрдмреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб null рдФрд░ void 0 рджреЛрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг == null рдХреЗ рдмрдЬрд╛рдп рдЯреНрд░рд┐рдкрд▓ рдмрд░рд╛рдмрд░ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмреЗрдмреЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб null рдФрд░ void 0 рджреЛрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг == null рдХреЗ рдмрдЬрд╛рдп рдЯреНрд░рд┐рдкрд▓ рдмрд░рд╛рдмрд░ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реИ?

@proteria рдореИрдВрдиреЗ __Babel__ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ рдХреЛрдб рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдбрд╛рд▓реА; рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк loose рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдкрд╛рд╕ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рддреНрдп рдорд╛рди рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдЦреНрдд рд╕рдорд╛рдирддрд╛ рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдпрд╣ document.all (рдпрд╛ рдкрд╛рдВрдбрд┐рддреНрдп рдХреЗ рд▓рд┐рдП, [[IsHTMLDDA]] рдЖрдВрддрд░рд┐рдХ рд╕реНрд▓реЙрдЯ ) рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдПрдХ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдЬрд┐рд╕реЗ рдкрд╢реНрдЪ рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдЪрд╛рд░ рдорд┐рд▓рддрд╛ рд╣реИред

document.all == null // true
document.all === null || document.all === undefined // false

рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдЦрдВрд▓рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ

document.all?.foo === document.all.foo

рд▓реЗрдХрд┐рди document.all == null ? void 0 : document.all.foo рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ void 0 рд▓реМрдЯрд╛рдПрдЧрд╛ред рдвреАрд▓реЗ рдореЛрдб рдореЗрдВ, рдХрд▓реНрдкрдирд╛ рдХреЗ рдЗрд╕ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рд╛рджрдЧреА/рдкреНрд░рджрд░реНрд╢рди/рдЬрдирд░реЗрдЯреЗрдб рдХреЛрдб рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡реИрд╕реЗ рднреА document.all рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ document.all рдорд╛рдорд▓рд╛ рд╡рд┐рд╢реЗрд╖ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рд╡рд╕реНрддреБ рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЕрдзрд┐рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ document.all рдХреЛ рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣рд╛рдВ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмреИрдмреЗрд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ:

(_prop = prop) === null || _prop === void 0 ? void 0 : _prop./* do stuff */;

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ document.all рдЪрд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ HTMLAllCollection рдкрд░ рд╣реИ, рди рдХрд┐ document.all рдкрд░ред

рддреЛ рдЖрдкрдХреЛ рдмрд╕ instanceof HTMLAllCollection рдЪреЗрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЖрдк рд╕реБрдирд╣рд░реЗ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

рд╣рд╛рдБ рд▓реЗрдХрд┐рди... рдЖрдкрдиреЗ instanceof рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрдмрдХрд┐ рдЖрдк рдХреЗрд╡рд▓ === null || === void 0 рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣ рдЕрдзрд┐рдХ рд╕рд░рд▓ рд╣реИред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ - рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдЖрдкрдХреЛ document.all рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ :)

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд▓рдЪрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рддреЛрдбрд╝ рджреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреМрди рд╢рд┐рдХрд╛рдпрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рд╣реИ, рдмрд╕ рдЗрд╕рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИред

@noppa рдЗрд╕реЗ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ foo instanceof HTMLAllCollection true рд╣реИ, рддреЛ foo === null || foo === void 0 рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рд╣рдо _safely_ foo == null рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

@ рдЬреА-рд░рде рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВ рдпрд╛ рдирд╣реАрдВ, рдкрджрд╛рд╡рдирдд рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

@jhpratt рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдЧреИрд░-рд▓рдХреНрд╖реНрдп рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╣реИред

рд╕рд╛рде рд╣реА, рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП foo┬а===┬аnull┬а|| foo┬а===┬аvoid┬а0 рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП HTMLAllCollection рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред any рдпрд╛ object , рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЧреИрд░-рд▓рдХреНрд╖реНрдп (5) рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ

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

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

рдирд┐рд╖реНрдкрдХреНрд╖ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, TS _has_ рдиреЗ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдорд┐рдиреАрдлрд╛рдпрд░ рдХреЛ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ (рдкреНрд░рдХрд╛рд░) рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ - == null рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдХрд╛рд░рдг рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╣реИред

рдпрджрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд▓реИрдВрдЧ рдЯреАрдо рдмреИрдмреЗрд▓ рдХреЗ "рдвреАрд▓реЗ" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рдорд╛рди tsconfig рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рддреА рд╣реИред

рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, terser рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ foo === null || foo === undefined рдХреЛ foo == null рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдПрдЬ рдХреЗрд╕ рдХреЗ рдХрд╛рд░рдг рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд▓реИрдВрдЧ рдЯреАрдо рдмреИрдмреЗрд▓ рдХреЗ "рдвреАрд▓реЗ" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рдорд╛рди tsconfig рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝рддреА рд╣реИред

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо TS рдФрд░ Babel рджреЛрдиреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдСрдкрд░реЗрдЯрд░ рдХреЛ Babel/рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрд╛рд╕рдереНрд░реВ рдХрд░рдирд╛ рд╣реЛ!

@fbartho

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо TS рдФрд░ Babel рджреЛрдиреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдСрдкрд░реЗрдЯрд░ рдХреЛ Babel/рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрд╛рд╕рдереНрд░реВ рдХрд░рдирд╛ рд╣реЛ!

рдореБрдЭреЗ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖ рд░рд╣реА рд╣реИред рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмреИрдмреЗрд▓ рддрдХ рдкрд╣реБрдВрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ; рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмреИрдмреЗрд▓ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдЯ рдЕрдк рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА noEmit: true рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА _everything_ рд╕реЗ рд╣реЛрдХрд░ рдмреИрдмреЗрд▓ рддрдХ рдЬрд╛рддрд╛ рд╣реИред

@ рдЬрд╝рд░реЗрд▓ рдмреЗрдмреЗрд▓ рдХреЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЧрд╛рдпрдм рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╣рдорд╛рд░рд╛ рдХреЛрдбрдмреЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрднрд░ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдирд╛рдорд╕реНрдерд╛рди рдФрд░ рдХреЙрдиреНрд╕реНрдЯ рдПрдирдо рд╢рд╛рдорд┐рд▓ рдереЗред рд╣рдо рдЙрддреНрд╕рд░реНрдЬрди рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде рдЯреАрдПрд╕рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдмреИрдмреЗрд▓ рдХреЛ рджреВрд╕рд░реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред (рд╣рдо рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдХрднреА рднреА рд╕рднреА рдмреЗрдореЗрд▓ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХреЗрдВрдЧреЗ)

рдЗрд╕ рдзрд╛рдЧреЗ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдЪрд░рдг 3 рдХреА рдШреЛрд╖рдгрд╛ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╕рдм рдХреБрдЫ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реАрдзрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЯрди рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯрд╣рдм рдХреЛ рджреЛрд╖ рджреЗрдВ)

рдорд╣рд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ - "рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдЦрдВрд▓рд╛" / "рд╕реБрд░рдХреНрд╖рд┐рдд рдиреЗрд╡рд┐рдЧреЗрд╢рди"ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдЦреНрдд-рдореЛрдб рдореЗрдВред рдпрд╣ рдЬрд╛рдирдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ рдХрд┐ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред тЭдя╕П

рдпрд╣ рдореБрдЭреЗ рдпрд╣рд╛рдВ рд▓рд╛рдпрд╛ рдФрд░ рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╕ рдПрдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛:

рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.7 рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рддред

document.querySelector('html')?.setAttribute('lang', 'en');

рдмрдирд╛рдо

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.5 рдореЗрдВред

const htmlElement = document.querySelector('html');
if (htmlElement) {
  htmlElement.setAttribute('lang', 'en');
}

рдХреНрдпрд╛ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдпрд╛ рдпрд╣ рдЕрднреА рднреА TypeError: Cannot read property 'setAttribute' of null. рд╣реИ? ? рд╕реЗрд╢рдиред рд╢реВрдиреНрдп/рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рдмрд╛рдж рдЖрдЧреЗ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд░рджреНрдж рдХрд░ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

class Test {
  it() {
    console.log('One');
    document.querySelector('html')?.setAttribute('lang', 'en');
    console.log('Two');
  }
}
new Test().it();

рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ:
рдпрджрд┐ html рддрддреНрд╡ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ (рд╢реВрдиреНрдп)ред рдХрдВрд╕реЛрд▓ рдХреЛ One рдФрд░ Two рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ setAttribute рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдирд╣реАрдВ)ред
рдХреНрдпрд╛ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрд╛?

@domske FYI рдХрд░реЗрдВ, рдпрд╣ рдХрдбрд╝рд╛рдИ рд╕реЗ TS рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдПрдХ рдЬреЗрдПрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред

TC39 рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд╣реЛрдЧреА:

document.querySelector('html')?.setAttribute?.('lang', 'en');

рдЪрд░реНрдЪрд╛ рдлрд┐рд░ рд╕реЗ рд╕рд░реНрдХреБрд▓рд░ рд╣реЛрдиреЗ рд▓рдЧреА рд╣реИ рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╛рдкрд╕ рдмрдВрдж рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЧрдП рд╣реИрдВред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рднреА 100+-рдЯрд┐рдкреНрдкрдгреА рд▓рдВрдмреЗ рдЧрд┐рдЯрд╣рдм рдереНрд░реЗрдб рдореЗрдВ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реБрднрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рднреА рдкреВрд░реНрд╡ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реВрдВред рд╢рд╛рдпрдж рдЖрдкрдХрд╛ рд╕рд╡рд╛рд▓ рдФрд░ рдЙрд╕рдХрд╛ рдЬрд╡рд╛рдм рд╡рд╣реАрдВ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Zlatkovsky picture Zlatkovsky  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dlaberge picture dlaberge  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zhuravlikjb picture zhuravlikjb  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Antony-Jones picture Antony-Jones  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

remojansen picture remojansen  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ