2022. 12. 3. 04:24ㆍ웹 개발/javascript
1. 속성 존재 여부 확인
객체 내부에 어떤 속성이 있는지 확인해보는 코드는 굉장히 자주 사용되는 코드이다.

속성 여부 확인



obj 객체의 키 값 value는 존재하지 않기 때문에 value = undefined 이다.
따라서 첫 번째 사진의 undefined !== undefined -> false 가 검출된다.
두 번째 사진의 obj.value는 undefined이기 때문에 값이 존재하지 않으므로 false로 검출된다.
세 번째 사진의 경우에는 obj.value 가 true(값이 있다.)일 떄는 따로 처리하지 않고, false일 경우에 console.log를 출력한다.
+. 기본 속성 지정

obj.value 의 값이 존재하지 않으면 "value 값"이라고 기본 속성을 지정하는 방법도 가능하다.
2. 다중 할당
구조 분해 할당이라고도 한다.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
구조 분해 할당 - JavaScript | MDN
구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다.
developer.mozilla.org
2.1 배열 기반 다중 할당
[식별자, 식별자, 식별자, ...] = 배열

배열 인덱스 a,b 에 값을 할당하고 a와 b의 값을 바꿔치기하는 것도 가능하고

이와 같이 배열의 일부값만 가져올 수도 있다.
2.2. 객체 기반 다중 할당

객체를 선언하고, 구조 분해 할당으로 obj의 키 값을 const로 재 선언하고 보여주는 결과이다.
3. 전개 연산자
배열과 객체는 할당할 때 얕은 복사라는 것이 이루어진다.
https://ko.javascript.info/object-copy
참조에 의한 객체 복사
ko.javascript.info
결론부터 이야기하자면, 얕은 복사는 참조(by reference)기 때문에, 같은 값을 다르게 부르는 것이라고 생각하면 될 듯 싶다.

두 변수 모두 같은 참조값을 가리키고 있기 때문에, 하나의 변수의 값만 바꿔도 둘 다 변경되는 것처럼 보이는 것이다.
반대말은 깊은 복사이다.
깊은 복사라면 복사한 두 배열이 완전히 독립적으로 작동한다. 자바스크립트 개발에서는 깊은 복사를 클론(Clone)을 만드는 것이라고 표현하기도 한다.
최신 자바스크립트에서는 전개 연산자를 사용해 다음과 같이 입력하기만 해도 된다.
[...배열]
3.1. 배열 전개 연산자

다음이 얕은 복사를 확인 할 수 있는 예 이다.
j가 i의 얕은 복사로 만들어졌기 때문에, 기존의 목표인 i = "안녕하세요!" 와 j = "안녕하세요;;" 가 되지 않고 ! ;; 두개가 합쳐진 것을 확인할 수 있다.

다음은 깊은 복사(클론)를 확인 할 수 있다.
배열 b 전개 연산자를 사용해 a의 값으로 복사되어 클론되어지고, a와 b를 수정하게 되더라도 서로 독립적으로 작동하는 것을 확인 할 수 있다.
3.2. 객체 전개 연산자

앞서 나왔던 배열의 얕은 복사와 같다.

전개 연산자를 사용해 깊은 복사로 별개의 객체를 만들어 낸 것을 볼 수 있다.
또한 추가로 자료를 넣을 수도 있다.

다만 객체는 전개 순서가 중요하므로 제일 먼저 ...person을 하고 그 뒤에 새로운 값을 추가한다던지, 복사한 객체의 값을 바꾸는 것이 좋다.

obj 객체와 겹치지 않는 hobby 키 값의 속성(property)는 선언한 값이 왔지만 다른 나머지 값들은 obj의 값이 덮어씌워진 것을 확인 할 수 있다.(순서 중요!)
'웹 개발 > javascript' 카테고리의 다른 글
| 6. 객체 (0) | 2022.11.29 |
|---|---|
| for of, for in 문법 (0) | 2022.11.28 |
| JavaScript의 ES란 무엇인가? ES5/ES6 문법의 차이 (0) | 2022.11.27 |
| 실습 예제 (0) | 2022.11.19 |
| 실행 컨텍스트와 콜 스택, 스코프 체인, 변수 은닉화 (0) | 2022.11.18 |