In case of non primitive types (e.g objects) they are compared by reference also holds true for abstract equality operator i.e "==", its not only true for strict equality operator i.e "===". e.g let obj = {x:1}; let obj1 = {x:1}; let obj2 = obj; console.log(obj == obj1); // false since obj and obj1 points to //different objects console.log(obj === obj1); // false as expected console.log(obj2 == obj); // true console.log(obj2 === obj); // true let arr = [1,2,3]; let arr1 = [1,2,3]; let arr2 = arr; console.log(arr == arr1); // false console.log(arr === arr1); // false console.log(arr2 == arr); // true console.log(arr2 === arr); // true