1. 객체 선언

1-1. 선언 방식

// 객체 생성자 방식
let member = new Object(); 

// 객체 리터럴 방식
let member2 = {}; 

// key:value 의 형태
let member3 3 {
	key1 : "value1",
	key2 : "value2"
	//...
}

// 별에별 타입이 다 들어감.
let member4 = {
  name: "배재현",
  age: 23,
  live: true,
  child: undefined,
  car: ["benz", "bmw"],
  getName: function () {}
};

1-2. 객체 프로퍼티 접근

let member = {
  name: "배재현",
  age: 32,
  live: true,
  child: undefined,
  car: ["benz", "bmw"],
  getName: function () {}
};

//점 표기법
console.log(member.name);

//괄호 표기법
console.log(member["name");

//활용.
function getPropertyValue(key) {
	return member[key];
}

console.log(getPropertyValue("age")); //32

1-3. 객체내부 프로퍼티 새로운 값 생성, 수정, 삭제

let member = {
  name: "배재현",
  age: 32,
  live: true,
  child: undefined,
  car: ["benz", "bmw"],
  getName: function () {}
};

member.address = "일산";
console.log(member); // address 가 추가된 것을 볼 수 있다.

member["gender"] = "MAN"; // 괄호표기법으로도 추가 가능하다.
console.log(member);

member.address = "안산";
console.log(member); // address가 안산으로 변경되었다.

delete member.age // age 가 삭제된다.
delete member["live"] // live가 삭제된다.
// 단, delete는 메모리에 남아있다.
// 때문에 null로 할당해주는 것이 좋다.

member.car = null; // 이렇게.

객체를 let이 아닌 const로 할당했다면?

⇒ 예상으로는 값을 수정할 수 없을 것으로 보인다. 하지만 수정이 가능하다.

const member = {
  name: "배재현",
  age: 32,
  live: true,
  child: undefined,
  car: ["benz", "bmw"],
  getName: function () {}
};

member.name = "ShipJH";

console.log(member.name);
//member 객체가 const로 선언되어있어도. 내부의 값은 변경이 가능하다.

//단, member 객체 자체를 변경할 순 없다!
member = {
	nickName: "bjh"
	//...
} // error.

// 그렇다면,, let 이라면 변경이 가능할까?

그렇다면,, let 이라면 변경이 가능할까?

⇒ 가능하다.

let member = {
  name: "배재현",
  age: 32,
  live: true,
  child: undefined,
  car: ["benz", "bmw"],
  getName: function () {}
};

member.name = "ShipJH";
console.log(member);

member = {
  nickName: "bjh123"
};
console.log(member);

//member 객체는 nickName이란 key와 bjh123이란 값만 선언된 객체로 변한다.