DEV Community

Discussion on: The Difference Between Null and Undefined in JavaScript

Collapse
 
za-h-ra profile image
Zahra Khan

This is incredible feedback and so good to learn!

Yeah I've watched some videos on the topic where it's best practice to use undefined over null but I love your explanation!

Thank you!

Collapse
 
peerreynders profile image
peerreynders • Edited

One caveat about undefined:

const obj = {
  nil: null,
  nothing: undefined,
};

console.log(obj.nil == undefined);          // true  (non-strict equality)
console.log(obj.nothing === undefined);     // true
console.log(obj.zilch === undefined);       // true

console.log(obj.hasOwnProperty('nil'));     // true
console.log(obj.hasOwnProperty('nothing')); // true
console.log(obj.hasOwnProperty('zilch'));   // false

const array = [null, ,undefined];

console.log(array[0] == undefined);         // true  (non-strict equality)
console.log(array[1] === undefined);        // true
console.log(array[2] === undefined);        // true
console.log(array[3] === undefined);        // true

console.log(array.hasOwnProperty(0));       // true  (value `null`)
console.log(array.hasOwnProperty(1));       // false (hole, empty)
console.log(array.hasOwnProperty(2));       // true  (value `undefined`)
console.log(array.hasOwnProperty(3));       // false (out of bounds)
Enter fullscreen mode Exit fullscreen mode

An undefined value is inconclusive with regards to the existence of the property/element within an object/array.

Also note that browser developer tools will mark "holes" in arrays with empty.

Chromium:

> console.log([0,,2]);
    (3) [0, empty, 2]
Enter fullscreen mode Exit fullscreen mode

Firefox:

> console.log([0,,2]);
    Array(3) [ 0, <1 empty slot>, 2 ]
Enter fullscreen mode Exit fullscreen mode

ECMAScript 6: holes in Arrays


The void operator returns undefined.

let count = 0;
const result = void(count += 1);
console.log(count);  // 1
console.log(result);  // undefined
Enter fullscreen mode Exit fullscreen mode