JT in Helsinki

Home About RSS

The other day I was explaining to someone about the differences between null and undefined in Javascript. I thought it might be worth writing a quick post to show how Javascript handles each one. The undefined type is quirky feature of javascript that is similar to null but different.

Differences between null and undefined

let a;

a == null            // true
a === null           // false

a == undefined       // true
a === undefined      // true

let b = null;

b == null            // true
b === null           // true

b == undefined       // true
b === undefined      // false

typeof a             // 'undefined'
typeof b             // 'object'


let z = {c: null};

c.notFake == null        // true
c.notFake === null       // true

c.notFake == undefined   // true
c.notFake === undefined  // false


d.fake == null        // true
d.fake === null       // false

d.fake == undefined   // true
d.fake === undefined  // true

null = 1;            // throws error: invalid assignment
undefined = 1;       // works fine but could be problematic

Why are they different?

Javascript has six built in types of which null and undefined are two. Variables that have yet to be assigned are assigned undefined. Null values on the other hand represent values where there is an intentional absence of an assigned value. Thus both represent the absence of a value but one is intentional (null) and one is not (undefined). For this reason the following holds true:

undefined === null;   // false
undefined == null;    // true


let x = (function(){
  // ...returns nothing
})();

x === undefined;  // true
x === null;       // false


function someFunc(arg1, arg2) {
    console.log(arg1, arg2);
}

someFunc("test"); // prints ->  "test", undefined

N.B This example shows why it is better to use triple equals (===) to ensure the robustness of your program. Double equals (==) will lead to less code but also more potential issues.

Does assigning undefined delete a property from an object?

In short, “no”. You can assign undefined to a property but it won’t remove it from an object.

The only way to remove a property from an object is to use delete yourobject.property. delete is intended to be used on objects. Although pre ES5 allowed delete someVariable to be used on variables, ES5+ in strict mode won’t allow this.

Reading more

undefined on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined undefined value as defined by the ECMASScript specification: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-undefined-value undefined type as defined by the ECMASScript specification: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-terms-and-definitions-undefined-type

null on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null null value as defined by the ECMASScript specification: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-null-value null type as defined by the ECMASScript specification: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-terms-and-definitions-null-type

The six types of Javascript: https://www.ecma-international.org/ecma-262/9.0/index.html#sec-ecmascript-data-types-and-values