동등 연산자로 피연산자를 비교할 때는 JavaScript 엔진에 의해 암묵적인 타입 변환이 먼저 이루어진다. 따라서 좌항과 우항의 타입이 다르더라도 값이 같다면 true를 반환한다.
동등 연산자는 null 과 undefined 두 값을 동일하게 취급하고, 두 값을 제외한 다른 값들에 대해서는 항상 false를 반환한다.
일치 연산자는 좌항과 우항의 피연산자가 값과 타입이 모두 같은 경우에만 true를 반환한다. 두 값이 모두 숫자인 경우, 둘 다 NaN이 아닌 동일한 값이거나, 하나가 +0이고 하나가 -0이면 동등한 것으로 간주된다.
Object.is()는 두 값이 같은 값인지 불린으로 반환한다.
다음 중 하나를 만족하면 두 값은 같다.
우선, 얕은 복사는 객체의 참조값(주소)을 복사하고, 깊은 복사는 객체의 값 자체를 복사한다.
원본 객체를 복사할 때, 원본 객체의 프로퍼티들을 복사하지만, 원본 객체의 프로퍼티가 참조형 데이터(예: 객체, 배열 등)일 경우 그 참조값만 복사하는 것을 의미한다. 즉, 원본 객체와 복사된 객체가 동일한 참조값을 공유하게 된다.
obj2에 값을 새로 넣었지만, obj1에도 값이 추가된 것이 보인다. 객체의 주소값을 복사하여 obj1와 obj2가 하나의 데이터를 공유한 것을 볼 수 있다.
object.assign( ) 메소드는 하나 이상의 소스 객체에서 열거 가능한 모든 자체 속성 값을 대상 객체로 복사하는 데 사용된다.
코드의 마지막 줄은 객체가 그대로 유지되고 변경되지 않은 것을 확인할 수 있다. object.assign( ) 메소드는 깊은 복사처럼 보이지만 2차원 객체에서는 얕은 복사가 일어난다.
객체의 실제 값을 복사하는 것을 의미한다. 원본 객체와 복사된 객체가 완전히 독립적이라는 것을 뜻하며, 한 객체에서 변경이 발생하더라도 다른 객체에 영향을 주지 않는다.
원본 객체를 JSON 문자열로 변환한 다음, 그 문자열을 다시 객체로 파싱하여 새로운 객체를 생성한다. 이렇게 하면 원본 객체와 완전히 동일한 새로운 객체가 생성되며, 이 두 객체는 서로 독립적이다.
Lodash 라이브러리의 _.cloneDeep( ) 함수를 사용하여 깊은 복사를 수행할 수 있다. 원본 객체의 모든 내부 객체를 재귀적으로 복사하여 완전히 새로운 객체를 생성한다. 이 방법은 복잡한 객체 구조를 가진 경우에 특히 유용하다.