본문 바로가기

Development/JavaScript

JS기초_5.3(객체와 배열 고급)

속성 존재 여부 확인

const data = {
    name: 'bob',
    age: 35
}

if (data.name !== undefined) {
    console.log('name 속성이 있습니다.')
} else {
    console.log('name 속성이 없습니다.')
}

//짧은 조건문 사용

object.name || console.log('name 속성이 없습니다.')

 

 

배열 기반의 다중 할당

[식별자, 식별자, 식별자, _] = 배열

let [a, b] = [1, 2]   // a=1, b=2 할당
console.log(a, b)
1, 2

[a, b] = [b, a]     //a에 b가 할당되고, b에 a가 할당되므로 값이 서로 교환
(2)[2, 1]
console.log(a, b)
2, 1

 

 

객체 기반의 다중할당

객체 속성 꺼내서 다중 할당하기

{속성 이름, 속성 이름} = 객체
{식별자=속성 이름, 식별자=속성 이름} = 객체


//객체 생성
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)


//출력
# 속성 이름 그대로 꺼내서 출력하기
혼자 공부하는 파이썬 18000

# 속성 이름 그대로 꺼내서 출력하기
혼자 공부하는 파이썬 18000

 

 

배열 전개 연산자

배열 얕은 복사

복사했을 때 이름만 다르게 붙는 것을 얕은 복사(참조 복사)라고 한다.

const a = ['milk', 'bread']
const b = a
b.push('tomato')

console.log(a)
console.log(b)

//실행
[ 'milk', 'bread', 'tomato' ]
[ 'milk', 'bread', 'tomato' ]

 

배열 깊은 복사

깊은 복사는 클론을 만든다고 표현한다. 최신 자바스크립트에서는 전개 연산자를 사용한다.

[...배열]
//이렇게 하면 얕은 복사와 다르게 두 배열이 독립적으로 작동한다.

const a = ['milk', 'bread']
const b = [...a]
b.push('tomato')

console.log(a)
console.log(b)

//출력
[ 'milk', 'bread' ]
[ 'milk', 'bread', 'tomato' ]

전개 연산자를 사용한 배열 자료 추가

const a = ['milk', 'bread']
const b = ['tomato', ...a]

console.log(a)
console.log(b)

//출력
[ 'milk', 'bread' ]
[ 'tomato', 'milk', 'bread' ]

 

 

객체 전개 연산자

객체 얕은 복사

const a = {
    name: 'bob',
    age: 35
}
const b = a
b.name = 'john'
b.age = 33

console.log(JSON.stringify(a))
console.log(JSON.stringify(b))

//출력
{"name":"john","age":33}
{"name":"john","age":33}

객체 깊은 복사

const a = {
    name: 'bob',
    age: 35,
    country: 'korea'
}
const b = {...a}
b.name = 'john'
b.age = 33

console.log(JSON.stringify(a))
console.log(JSON.stringify(b))

//출력
{"name":"bob","age":35,"country":"korea"}
{"name":"john","age":33,"country":"korea"}

전개 연산자를 사용한 객체 요소 추가

const a = {
    name: 'bob',
    age: 35,
    contury : 'korea'
}
const b = {
    ...a,
    name : 'john',
    age : 33,
    gender : 'M'
}

console.log(JSON.stringify(a))
console.log(JSON.stringify(b))

//출력
{"name":"bob","age":35,"contury":"korea"}
{"name":"john","age":33,"contury":"korea","gender":"M"}

 

 

키워드 정리

  • 속성 존재 여부 확인은 객체 내부에 어떤 속성이 있는지 확인하는 것을 의미. 객체에 없는 속성은 접근하면 undefined가 나오는데, 이를 활용하면 된다.
  • 다중 할당은 배열과 객체 하나로 여러 변수에 값을 할당하는 것을 의미
  • 얕은 복사(참조 복사)는 복사하는 행위가 단순하게 다른 이름을 붙이는 형태로 동작하는 복사를 의미
  • 깊은 복사는 복사 후 두 객체를 완전하게 독립적으로 사용할 수 있는 복사를 의미

 

Q1.

정답 2번

 

 

'Development > JavaScript' 카테고리의 다른 글

JS 기초 _보충(변수와 자료형 변환)  (0) 2023.04.03
배열 메서드_요약  (0) 2023.03.15
JS기초_5.2(객체 속성과 메소드)  (0) 2023.03.11
JS기초_5.1(객체기본)  (0) 2023.03.10
JS기초_4.2(함수 고급)  (0) 2023.03.09