рдорд┐рдЧреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдлреЛрдЯреЛ ├Б рдкрдбрд░рд┐рдпрди редрд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!
рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕реИрдо рд╕реЗрджрд┐рдЧрд┐рдпрди
рдХреЗ рд▓реЗрдЦ
"рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреИрдирд┐рдВрдЧ, рдЕрд╢рдХреНрдд рддрд╛рд▓рдореЗрд▓ рдФрд░ рдХреИрд╕реЗ рд╡реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреА рдЧрдИ рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓реЗрдВрдЧреЗ
" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рди, рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрдШ, рдФрд░ рд╡реЗ рд▓реЗрдЦрди рдХреЛрдб рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ
рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рддрд░реАрдХрд╛ред
рдпрджрд┐ рдЖрдк рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рд┐рд▓реАрдЬрд╝ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ 3.7 рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ рдФрд░ рдирд▓ рдХреЛрд▓реЗрд╕рд┐рдВрдЧ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпреЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдмрд╛рдмреЗрд▓ 7.8.0 рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рджрд╛рд╡реЗрджрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рд╡реЗ рдХреНрд░рдорд╢рдГ 4 рдФрд░ 3 рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реИрдВ, (23 рдЬрдирд╡рд░реА рдХреЛ,
ECMAScript 2020 рдорд╛рдирдХ рдХреЛ рдЕрдкрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд╣рд╛рдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛, рдЕрд╢рдХреНрддрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг, рдФрд░ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЗрдВ рд╣реИрдВ; рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ Habr├й рдкрд░ рдПрдХ
рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рд╣реИ) рдЬреЗрдПрд╕ рдИрдПрд╕ 2020 рдореЗрдВ рдкреЗрд╢ рдХреА рдЧрдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ
рдПрдХ рдЕрдиреБрд╡рд╛рдж , рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрджрд╛рд╣рд░рдг рдЪреЛрдЯ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ - рд▓рдЧрднрдЧред
рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪреЗрдирд┐рдВрдЧ
рдЕрдХреНрд╕рд░, рд╣рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдПрдореНрдмреЗрдбреЗрдб рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдиреЗ рдмрд╣реБрдд рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреА 100 рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдирд╣реАрдВ рд▓рд┐рдЦреА рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдирдХреИрдкреНрдб рдЯрд╛рдЗрдкрд░реНрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
const data = {} data.user.id
рдЖрдЧреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдЫрджреНрдо рдХреЛрдб (рдЧрд▓рдд рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
{ 'url': 'https://api.github.com/repos/sedighian/Hello-World/pulls/12', 'number': 12, 'state': 'open', 'title': 'Amazing new feature', 'user': { 'login': 'sedighian', 'id': 123234 }, 'labels': [{ 'id': 208045946, 'name': 'bug', }] }
рдЕрдирдХреНрд░реЗрдб рдЯрд╛рдЗрдк рдЯрд╛рдЗрдк рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдЖрдИрдбреА рд╡реИрд▓реНрдпреВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ "рдХреБрдЫ рдбрд╛рдВрд╕ рдХрд░рдирд╛ рд╣реИ"ред рд╣рдо рдкрд╣рд▓реЗ рдЬрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдереЗ, рд╡рд╣ рдкреНрд░рддреНрдпреЗрдХ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╕реНрддрд░ рдкрд░ рд╡рд╕реНрддреБ рдХреА рд╕рдЪреНрдЪрд╛рдИ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ред рдпрд╣ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ рд╕рд╢рд░реНрдд рд╡рд┐рд╡рд░рдг рдХреА рддрд░рд╣ рд╣реИ рдЬреЛ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреВрд▓рд┐рдпрди рдХреА рддрд░рд╣ рд▓реМрдЯрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдмрд╕реЗ рд╕рд╛рдл рдФрд░ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрдм рддрдХ рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
const userId = data && data.user && data.user.id
рдпрд╛, рдпрджрд┐ рдЖрдк рд╡рд┐рдирд╛рд╢рдХрд╛рд░реА рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ:
const { user: { id } = {} } = data || {}
рд▓реЙрдбрд╢ рдпрд╛ рдПрдореНрдмрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзрд┐рдХ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рддрд░реАрдХрд╛ рд╣реИ:
рд╣рдо рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?
const userId = data?.user?.id
рдЕрд╢рдХреНрдд (рдЕрд╢рдХреНрдд coalescing) рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди
рдЬрдм рд╣рдо рдЬрд┐рд╕ рд╡рд╕реНрддреБ рдХрд╛ рд╕рдВрдкрддреНрддрд┐ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рд╢реВрдиреНрдп рдпрд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рддреЛ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ, рдСрдкрд░реЗрдЯрд░ || (рддрд╛рд░реНрдХрд┐рдХ рдпрд╛)ред
рдпрджрд┐ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓реЙрдЧрд┐рди рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЗ рдорд╛рди рдХреЗ рд▓рд┐рдП рд╕реЗрдбрд┐рдпрди рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
рджреВрд╕рд░реЗ рдФрд░ рддреАрд╕рд░реЗ рдЙрджрд╛рд╣рд░рдг рд╕рдорд╛рди рд╣реИрдВред рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХрд╛ рдХреНрдпрд╛ рд▓рд╛рдн рд╣реИ? рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдХреЗрд╡рд▓ рджрд╛рдИрдВ рдУрд░ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдмрд╛рдИрдВ рдУрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдпрд╛ рдЕрд╢рдХреНрдд рд╣реИред рдЬрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ (рд╡реИрдз), рд▓реЗрдХрд┐рди рдЧрд▓рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рдХреБрдЫ рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо '' (рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ), рдЧрд▓рдд рдпрд╛ 0. рдХреЗ рд╕рд╛рде рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╕рд╣реА рдкрдХреНрд╖ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ:
рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдк рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдПрдореНрдмрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЙрдкрдпреЛрдЧрд┐рддрд╛:
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдПрдХ рдЪрд░ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореВрд▓реНрдп рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЛрдб рдмреНрд▓реЙрдХ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХрд╛ рд╣реИ:
const temp = { celsius: 0 } temp?.fahrenheit ?? setFahrenheit(temp)
рдХреНрдпрд╛ рдпрд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдХреНрд░рдо рдпрд╛рдж рд░рдЦреЗрдВ (рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди, рдлрд┐рд░ рдПрдХ рдЕрд╡рдзрд┐):
data.?user
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдПрдХ рдЧреИрд░-рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ:
data?.user()
рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рджрд░реНрдЬрдирд╛.рдЧреЗрдЯ рдпрд╛ EmberObject.getWithDefault рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИред рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ c null рдХрд╛ рд╕рдВрдпреЛрдЬрди "null" рдорд╛рди рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ:
const data = { user: { interests: null } }
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдСрд▓ рдж рдмреЗрд╕реНрдЯред