Արժեքի բացակայությունը մատնանշող երկու միանման տիպերի գոյությունը 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-ով գրված կոդի հետ աշխատող ծրագրավորողների համար։