요소가 같다고 해서, 배열의 값 또한 같지는 않습니다.
예를 들어, 동일한 요소를 가진 변수는 동등,일치 연산자를 통해서 비교해보면 true
로
나올 수 있지만, 배열은 요소가 같다고 해서 동등,일치 하지 않습니다.
배열이 요소를 만들 때는, 메모리의 한 공간을 할당해서 해당 공간에 요소를 저장하고
저장한 공간의 참조값을 반환합니다. 이로 인해 요소가 같더라도 배열이 참조하는 메모리
주소가 다르기에 같지 않다고 나옵니다.
( 추후 객체 포스팅에서도 나올 예정 )
let num1 = 12;
let num2 = 12;
console.log(num === num2); // true
let arr1 = [12,24];
let arr2 = [12,24];
console.log(arr1 === arr2); // false
/*
요소는 같더라도 메모리상을 참조하는 주소값이 서로 다르기에 같지 않습니다.
*/
let arr1 = [12,24];
let arr2 = arr1
console.log(arr1 === arr2);
arr1.push('same?');
console.log(arr2); // 12,24,'same?'
/*
arr2 배열은 arr1배열이 참조하는 메모리 공간을 공유하기에
arr1 배열이 요소를 업데이트하면, arr2 배열도 업데이트한 요소를 확인할 수 있습니다.
*/
const
를 사용하면 변수의 값을 변경할 수 없습니다.const
상수를 사용해도 배열안의 요소는 변경할 수 있습니다.const nums = [1,2,3];
nums.push(4);
console.log(nums); // 1,2,3,4
nums = [1,2,3,4,5]; // error, 새로운 참조를 하면 오류 발생
배열을 사용할때는 변수보다는 상수가 안전합니다.
배열안에 요소를 얼마든지 수정해도, 참조값은 그대로이기에 다른 배열과 착각할 경우가 없다.