1. 단축 속성명(shorthand property names)
: 객체의 속성값이 이미 변수로 존재한다면 변수이름만 사용하여 객체 생성 가능
let name = "John";
const obj = {
age: 21,
name: name,
getName: function getName() {
return this.name;
}
};
const obj = {
age: 21,
name, // 속성이름과 속성값을 가지고 있는 변수 이름이 동일한 경우
getName(){ // 속성이름과 함수(메소드) 이름이 동일한 경우 => function 키워드와 함께 생략
return this.name;
}
};
2. 계산된 속성명(computed property names)
: 변수를 이용해서 객체 속성의 키를 생성
// 속성 이름(key)과 속성 값(value)을 전달받아 객체를 반환하는 함수를 정의
function returnObject(key, value) {
/*
const obj = {};
obj[key] = value;
return obj;
*/
return { [key]: value };
}
function returnObject(key, value) {
/*
const obj = {};
obj[key] = value;
return obj;
*/
return { [key]: value };
}
// 속성 이름이 일련번호 형태를 가지는 객체를 반환하는 함수
function returnObject2(key, value, no) {
/*
const obj = {};
obj[key+no] = value;
return obj;
*/
return { [key+no]: value };
}
3. 전개 연산자(spread operator) ...
:배열 또는 객체를 하나하나 넘기는 용도로 사용
const numbers = [10, 20, 1, 30, 3, 2];
console.log(numbers); // 배열
console.log(...numbers); // 순열 (숫자의 나열) => 배열 요소의 나열
// 객체를 복사하는 과정에서 새로운 속성을 추가하거나 속성의 값을 변경하는 경우
let obj1 = { age: 26, name: 'hong' };
/*
let obj2 = { ...obj1 };
obj2.name = 'gildong';
*/
let obj2 = { ...obj1, name: 'gildong' };
console.log(obj2); // {age: 40, name: 'gildong', color: Array(2)}
// 객체를 결합하는 경우
const obj1 = { age: 21, name: 'hong' };
const obj2 = { hobby: 'soccer', age: 40 };
const obj3 = { ...obj1, ...obj2 };
console.log(obj3); // {age: 40, name: 'hong', hobby: 'soccer'}
const obj4 = { ...obj2, ...obj1 };
console.log(obj4); // {hobby: 'soccer', age: 21, name: 'hong'}
** 배열 관련 유의사항
let arr1 = [ 1, 2, 3 ];
let arr2 = arr1;
console.log(arr1); // [1, 2, 3]
console.log(arr2); // [1, 2, 3]
// 배열 값을 변경
arr1[1] = 20;
console.log(arr1); // [1, 20, 3]
console.log(arr2); // [1, 20, 3]
// => arr2는 arr1 배열의 주소를 복사한 것
// 배열의 주소가 아닌 배열의 값을 복사하는 것이 필요
// 전개 연산자를 이용해서 배열의 값을 복사
let arr5 = [ 1, 2, 3 ];
let arr6 = [ ...arr5 ];
console.log(arr5); // [1, 2, 3]
console.log(arr56; // [1, 2, 3]
arr5[1] = 20;
console.log(arr5); // [1, 20, 3]
console.log(arr6); // [1, 2, 3]
4. 비구조화(destructuring)
: 배열 또는 객체의 데이터(요소)를 변수에 나눠서 할당
1) 배열
const arr = [ 1, 2, 3, 4, 5 ];
let [ c, d, e, f ] = arr;
console.log(c, d, e, f); // 1 2 3 4
// =>c, d, e, f 변수에 arr 배열에 첫번째 인덱스부터 차례로 할당
// 두 변수의 값을 교환
let x = 10;
let y = 20;
비구조화 배열
~~~~~~~~ ~~~~~~~~
[ x, y ] = [ y, x ];
console.log(x, y); // 10 20
// 배열의 크기 보다 변수의 개수가 많은 경우, 기본값 설정이 가능
const arr = [ 1, 2 ];
let [ a, b, c=30 , d ] = arr;
console.log(a, b, c, d); // 1 2 30 undefined
// 배열의 일부값을 변수에 할당할 경우, 할당하지 않을 자리는 비워둠
let arr= [1, 2, 3];
let a=10, b=20, c=30;
[ a, , c ] = arr;
console.log(a, b, c); //1 20 3
// 배열의 값을 할당하고 남은 나머지를 새로운 배열로 만드는 경우
const arr = [ 1, 2, 3, 4, 5 ];
const [first, ...rest] = arr;
console.log(first); // 1
console.log(rest); // [2, 3, 4, 5]
2) 객체
// 객체 비구조화를 할 때는 객체의 속성명(key)이 중요
const obj1 = { age: 21, name: 'mike' };
const obj2 = { age: 40, name: 'john' };
const { age, name } = obj1;
console.log(age, name); // 21 'mike'
const { ageNew, nameNew } = obj1;
console.log(ageNew, nameNew); // undefined undefined
// 객체 비구조화를 통해 가져온 값을 새로운 변수 이름으로 사용할 경우 => 별칭을 부여
const { age: ageNew, name: nameNew } = obj1;
console.log(ageNew, nameNew); //21 'mike'
// 객체에 존재하지 않는 요소를 변수에 할당할 때 적용할 기본값 설정도 가능
const { age, name: nameNew, email='default' } = obj1;
console.log(age, nameNew, email); // 21 'mike' 'default'
// 객체 비구조화 시 객체의 일부 속성을 변수에 할당하고, 나머지를 새로운 객체로 저장
const obj3 = { age: 32, name: "John", grade: "c" };
// obj3의 age 속성의 값을 johnAge 변수에 할당하고, 나머지를 rest 이름의 객체에 할당
const { age: johnAge, ...rest } = obj3;
console.log(johnAge, rest); // 32 {name:'John', grade:'c'}
728x90
'JavaScript' 카테고리의 다른 글
api 파일 분리 시 axios의 응답이 console에 안나오는 경우 (0) | 2024.01.17 |
---|---|
JavaScript - Axios 이용한 외부 데이터 연동 (1) | 2023.10.21 |
JavaScript - 함수( 화살표 , map(), reduce(),filter()) (2) | 2023.10.20 |
JavaScript - 객체와 배열 (1) | 2023.10.19 |
JavaScript - 함수 선언 방식 (1) | 2023.10.19 |