속성 존재 여부 확인
객체 내부에 어떤 속성이 있는지 확인해보는 코드는 자주 사용하는 코드.
객체에 없는 속성에 접근하면 undefined 자료형이 나온다.
const object = { name: '혼자 공부하는 파이썬', price: 18000, publisher: '한빛미디어' } 객체 내부에 속성이 있는지 확인 if (object.name !== undefined) { console.log('name 속성이 있습니다.') } else { console.log('name 속성이 없습니다.') } if (object.author !== undefined) { console.log('author 속성이 있습니다.') } else { console.log('author 속성이 없습니다.') }
위와 같이 작성해도 되지만 특정속성이 false로 변환될수 있는 값(0,false, 빈 문자열)이
있어야 안전하게 사용할수 있다.
if (object.name) { console.log('name 속성이 있습니다.') } else { console.log('name 속성이 없습니다.') } if (object.author) { console.log('author 속성이 있습니다.') } else { console.log('author 속성이 없습니다.') }
물론 더 짧은 조건문을 사용해도 된다.
object.name || console.log('name 속성이 없습니다.') object.author || console.log('author 속성이 없습니다.')
객체의 기본 속성을 지정 object.name = object.name !== undefined ? object.name : '제목 미정' object.author = object.author !== undefined ? object.author : '저자 미상' 짧게작성도 가능 object.name = object.name || '제목 미정' object.author = object.author || '저자 미상' 객체 출력 console.log(JSON.stringify(object, null, 2))
author의 속성이 없었으므로 기본속성인 '저자미상'으로 적용된다.
배열 기반의 다중 할당
최신 자바스크립트부터 한번에 여러개의 변수에 값을 할당하는 다중 할당기능이 추가됨
ex. let [a, b] = [1, 2] -> a=1,b=2가 할당됨 console.log(a,b) -> 1,2로 출력 let arrayA = [1,2,3,4,5] const [a,b,c] = arrayA console.log(a,b,c) -> 1,2,3(앞에있는 3개의 값만 할당됨) 객체 기반의 다중 할당 객체 내부에있는 속성을 꺼내서 변수로 할당할때 사용 const object = { name: '혼자 공부하는 파이썬', price: 18000, publisher: '한빛미디어' } // 객체에서 변수를 추출 const { name, price } = object // name속성과 price속성을 그대로 꺼낸다 console.log('# 속성 이름 그대로 꺼내서 출력하기') console.log(name, price) console.log('') const { a=name, b=price } = object // name속성을 a라는 이름으로 price속성을 b라는 이름으로 꺼낸다. console.log('# 속성 이름 그대로 꺼내서 출력하기') console.log(a, b)
얕은 복사(참조 복사)
const 구름 = { 이름: '구름', 나이: 6, 종족: '강아지' } // const 별 = 구름 // 별.이름 = '별' // 별.아이 = 1 console.log(JSON.stringify(구름)) console.log(JSON.stringify(별)) 실행결과 {"이름":"별","나이":1,"종족":"강아지"} {"이름":"별","나이":1,"종족":"강아지"}
깊은 복사
const 별 = {...구름} 별.이름 = '별' 별.아이 = 1 console.log(JSON.stringify(구름)) console.log(JSON.stringify(별)) 실행결과 {"이름":"구름","나이":6,"종족":"강아지"} {"이름":"별","나이":1,"종족":"강아지"}