해당 내용은 '코어 자바스크립트' 서적을 참고하여 작성되었으며, 초보 개발자에게 유익한 책을 지필해주신 지은이 정재남 님께 감사의 말씀을 드립니다.
let oldObj = {
a: 123,
b: [1, 2, 3],
};
// 새로운 객체 생성 함수(변수 값 수정)
let copyObj = (oldObj, newVar) => {
let newObj = oldObj; // 변수 복사
newObj.a = newVar;
return newObj;
};
let newObj = copyObj(oldObj, 345);
console.log(oldObj === newObj); // true
/* 가변값의 성질로 인해 변수 복사로 만들어진 새로운 객체의 프로퍼티 값을 수정하면
기존 객체의 값까지 수정되어 비교가 불가능하다*/
라이브러리 사용
: immutable.js
같은 라이브러리가 있다고 하지만, 필자는 아직 사용해본 적이 없다.
깊은 복사(feat. 얕은 복사)
let copyObj = (oldObj, newVar) => {
let newObj = {};
newObj.a = newVar;
newObj.b = oldObj.b;
return newObj;
};
/* 이런식으로 한다면 변수 복사시, 객체의 주소가 전달되지 않고 내부 프로퍼티 값을 그대로 가져온다.
그래서 oldObj, newObj 값이 독립적으로 활용될 수 있다. */
let copyObj = (oldObj, newVar) => {
let newObj = JSON.parse(JSON.stringify(oldObj));
newObj.a = newVar;
return newObj;
};
console.log(undefined == null); // true
console.log(undefined === null); // false
// 자바스크립트는 null 의 형식을 객체라고 인식하는데 이는 자체 버그라고 한다.
undefined
를 출력하는 경우
undefined
가 할당된다는 설명하는데undefined
를 출력하는 방식이다.return
값이 없는 함수일 때만약 undefined
값을 직접 할당해야하는 경우가 있다면?
그때는 undefined
대신에 null
값을 할당하여 자바스크립트에서 자동으로 할당되는 방식과 헷갈리지 않도록 설정하는 것을 권장한다고 한다.
undefined
와null
모두 '없음'을 뜻하지만 실제로 비어있는 것은 아니다.
다시 말하자면, 식별자는 존재하지만 값이 비어있는 것이다.
식별자 또한 존재하지 않을 때에는empty
라는 요소가 있으며 반복문에서도 인식하지 못한다.
이 또한 서적에서 확인할 수 있다.