/this-vs-that GitHub 1316★

array = [] vs array.length = 0

There are two ways to empty an array:

arr.length = 0;

// Or assign it to an empty array
arr = [];

Difference

Setting arr = [] creates a new array and doesn't affect other references.

let foo = ['hello', 'world'];

// Add a reference
let bar = foo;

foo = [];

// `bar` isn't affected
console.log(bar); // ['hello', 'world']

On the other hand, arr.length = 0 modifies the array. All references are affected.

let foo = ['hello', 'world'];
let bar = foo;

foo.length = 0;

// `bar` is affected
console.log(bar); // []

Good to know

  1. There is another, less popular approach to empty an array:

    arr.splice(0, arr.length);

    This method affects other references. Since .splice returns an array of removed items, you can get a copy of original array by assigning the result to a new variable:

    let foo = ['hello', 'world'];

    // Empty and create a copy of `foo`
    let bar = foo.splice(0, foo.length);

    console.log(foo); // []
    console.log(bar); // ['hello', 'world']
  2. If the array is declared as a constant, then you can't reassign it to [].

    const foo = [1, 2, 3];
    foo = []; // will throw an exception of
    // "Assignment to constant variable"

    foo.length = 0;
Follow me on and to get more useful contents.