Skip to content

Latest commit

 

History

History
38 lines (23 loc) · 5.1 KB

Null vs Undefined.hy.md

File metadata and controls

38 lines (23 loc) · 5.1 KB

Ո՞րն է Null-ի և Undefined-ի նմանությունն ու տարբերությունը։

Արժեքի բացակայությունը մատնանշող երկու միանման տիպերի գոյությունը JavaScript ծրագրավորման լեզվում հաճախ քննադատությունների պատճառ է դառնում։ Ընդունված է համարել, որ դրանցից մեկն ու մեկն ավելորդ է, և կարելի էր արժեքի բացակայությունը ցույց տալու համար բավարարվել ընդամենը մեկ տիպի առկայությամբ՝ կա՛մ Null կա՛մ Undefined, սակայն պետք է նշել որ այդ տիպերի առկայությունը պայմանավորված է JavaScript-ի վիրտուալ մեքենայի իրագործման մի շարք նրբություններով, և թեև թե՛ null-ը և թե՛ undefined-ն օգտագործվում են արժեքի բացակայության արձանագրման համար, այնուամենայնիվ դրանց մեջ կա նրբորեն արտահայտված որոշակի տարբերություն։

JavaScript-ում Null-ը պրիմիտիվ տիպ է, որն ունի միայն մի արժեք` null: Ի տարբերություն մի շարք այլ ծրագրավորման լեզուների, null-ը այստեղ չի նշանակում հղում դեպի գոյություն չունեցող օբյեկտ կամ զրոյական ցուցիչ։ Այն ուղղակի հատուկ արժեք է, որը պետք է հասկանալ որպես "ոչինչ", "դատարկ է" կամ "արժեքն անհայտ է"։

Undefined-ը նույնպես պրիմիտիվ տիպ է, և նույնպես ունի մեկ արժեք՝ undefined: Այն իրենից ներկայացնում է default (սկզբնական) արժեք, որն ավտոմատ կերպով ստանում են․

  • փոփոխականները, որոնց հայտարարելուց հետո արժեքներ չեն վերագրվել,

  • ֆունկցիաները, որոնք հստակ որևէ բան չեն վերադարձնում (օրինակ բացակայում է return հրահանգը),

  • օբյեկտի գոյություն չունեցող հատկությունները։

Բոլոր վերը նշված դեպքերում JavaScript-ի ինտերպրետատորը նրանց ավտոմատ կերպով վերագրում է undefined։ Իհարկե մենք կարող ենք հայտարարել փոփոխական և նրան ձեռքով վերագրել undefined, բայց այդպես անել խորհուրդ չի տրվում։ Բոլոր նման դեպքերում, երբ մեզ անհրաժեշտ է փոփոխականին վերագրել դատարկ արժեք, դրա համար օգտագործում ենք null-ը։ Սա մեզ մասնավորապես թույլ է տալիս տարբերակել, թե օրինակ օբյեկտի մեջ այդ հատկությունը գոյություն ունի, սակայն արժեք վերագրված չէ՞, թե՞ ընդհանրապես այդպիսի հատկություն օբյեկտի մեջ չկա։

Եթե դիտարկենք null-ի և undefined-ի նմանությունները, ապա կարող ենք ասել որ երկուսն էլ պրիմիտիվ տիպեր են, և երկուսի արժեքներն էլ հանդիսանում են falsy արժեքներ։ Այսինքն եթե փորձենք նրանց փոխակերպել բուլյան տիպի, կստանանք false.

console.log(!!null); // false
console.log(!!undefined); // false

Նաև պետք է նշել, որ ոչ խիստ հավասարության դեպքում, երբ տեղի է ունենում տիպերի վերափոխություն, նրանք իրար հավասար են՝

console.log(null == undefined); // true

Սա ուղղակի լեզվի կանոններից է, null-ն ու undefined-ը հավասար են իրար, և հավասար չեն ուրիշ ոչ մի արժեքի։

Խիստ հավասարության դեպքում null-ը և undefined-ը հավասար չեն իրար, քանի որ տարբեր տիպերի են պատկանում՝

console.log(null === undefined); // false

Ամփոփելով՝ կարող ենք ասել, որ եթե փոփոխականին, արգումենտին կամ օբյեկտի հատկությանն անհրաժեշտ է վերագրել «ոչինչ», «դատարկ» արժեք, ցանկալի է օգտագործել null։ Սակայն ընդգծենք՝ սա ֆիքսած կանոն չէ, ուղղակի այսպես ընդունված է, և սա հարմար պայմանավորվածություն է նաև այն պատճառով, որ շատ ավելի հասկանալի կարող է լինել այլ ծրագրավորման լեզուների տիրապետող, սակայն JavaScript-ով գրված կոդի հետ աշխատող ծրագրավորողների համար։