객체 생성과 프로퍼티 접근

const car = {
  name: 'superCar',
  price: "100000000",
};

console.log(car);

console.log(
  car.name, // 💡 마침표 프로퍼티 접근 연산자
  car['price'] // 💡 대괄호 프로퍼티 접근 연산자
);
// 빈 객체 생성
const car2 = {};
console.log(car2);

// 프로터피 추가
car2.name = 'oldCar';
car2.price = '1000000';

console.log(car2);

// 프로터피 수정
car2['price'] = '100000';

console.log(car2);

식별자 명명 규칙에 벗어나는 key 사용시

const obj = {
  1: '하나', // 숫자도 객체의 키로는 사용 가능
  'ab-cd': 'ABCD', // 문자 포함 시 키도 따옴표로 감싸야 함
  's p a c e': 'Space'
}

// 대괄호 프로퍼티 접근 연산자로만 가능
console.log(
  obj[1],
  obj['ab-cd'],
  obj['s p a c e']
);

// ⚠️ 오류 발생
// console.log(
//   obj.1,
//   obj.ab-cd,
//   obj.s p a c e
// );

표현식으로 key값 정의하기

let idx = 0;
const  obj = {
  ['key-' + ++idx]: `value-${idx}`,
  ['key-' + ++idx]: `value-${idx}`,
  ['key-' + ++idx]: `value-${idx}`,
  [idx ** idx]: 'POWER'
}

console.log(obj);

객체나 배열을 key값으로 사용시

const objKey = { x: 1, y: 2 };
const arrKey = [1, 2, 3];

const obj = {
  [objKey]: '객체를 키값으로',
  [arrKey]: '배열을 키값으로'
}

console.log(
  obj[objKey],
  obj[arrKey]
);

console.log(
  obj[{ a: 1, b: 2, c: 3 }], // 내용이 다른 객체
  obj['1,2,3'] // 문자열
);

// 로그를 펼쳐 키값을 볼 것 - 💡 문자열임
// 객체와 배열이 그 자체가 아니라 문자열로 치환되어 키가 되는 것
console.log(obj);

console.log(
  obj['[object Object]']
);

프로퍼티 삭제 - delete 연산자

const person1 = {
  name: '홍길동',
  age: 24,
  school: '한국대',
  major: '컴퓨터공학'
};

console.log(person1);

delete person1.age;
console.log(person1);

delete person1['major'];
console.log(person1);

// 없는 프로퍼티 삭제 시 오류가 발생하지는 않음
delete person1.hobby;
console.log(person1);