
객체란? 변수와 함수를 한곳에 저장할 수 있도록 해주는 데이터 타입의 공간이다. 객체 자체는 Property와 Method갖는 역할을 한다.
var user = {};
var user = new Object();
이때 선언된 변수를 Property 함수는 Method
let myself = {
age: 28, //Property
getAge:function(){ return this.age; } // Method
};

객체의 Key는 변수와 같은 역할, value 변수 내용과도 같다.
특수문자,한글,빈공간등이 들어갈 수 있다.let keyValue = {
망고 : '한글도가능',
myName : 'mango',
'my name' : '따움표로 띄어쓰기 가능',
11111 : '숫자도 가능'
$space : '',
age : '9999살',
getAge:function(){ return this.age; }
}
dot(.) Nptation
console.log(keyValue.myName)
bracket[] Nptation
console.log(keyValue['myName'])
숫자로 되어있는 key값은 대괄호연산자로 접근해야한다.
const Bracket = { dot : '이런거 말고' 111 : '이런거 (.)연산자로는 안됨' } Bracket.dot // 둘 다 가능 Bracket['111'] // []로 접근하기
const myself = {
name : 'Sunho Lee',
age : 18
}
myself['age'] = 28
let myName = myself['name'];
let myAge = myself.age;
console.log(myName) // Sunho Lee
console.log(myAge) // 28
객체에 이미 선언된 키를 다시 할당하면 재할당된다.
const myself = {
name : 'Sunho Lee',
age : 28
}
myself.address = "서울시 동작구", // (.)로 접근
myself['address'] = "서울시 동작구" // []로 접근
console.log(myself)
/* [object Object] {
address: "서울시 동작구",
age: 28,
name: "Sunho Lee" } */
const myself = {
name : 'Sunho Lee',
age : 28 ,
address : '서울시 동작구',
mbti:' ??안해봄 '
}
myself.mbti = 'ENFJ' // (.)로 접근
myself['mbti'] = 'ENFJ' // []로 접근
console.log(myself.mbti); // ENFJ
delete를 이용해서 삭제하기
const myself = {
name : 'Sunho Lee',
age : 28 ,
address : '서울시 동작구',
mbti:'ENFJ',
}
delete myself.address;
console.log(myself.address); // undefined (존재하지않음)

(출처 : https://workatit.tistory.com/88)
배열은 Object의 하위개념이다.
그래서 자바스크립트는 배열의 요소하나하나는
객체로 취급하기 때문에배열의 data type은 Object이다.
객체는 자신의 프로토타입이 가지는 모든 프로퍼티 및 메서드들을 상속받아 사용하므로 배열의 Array.prototype에 포함된 배열 표준 메서드와 Object.prototype의 표준 메서드들을 모두 사용할 수 있다.
👀 프로토타입(Prototype)에 관한 내용은 따로 정리!!
//fruitArray 배열
var fruitArray = ['apple','orange','banana'];
console.log(fruitArray[0]); // apple
console.log(fruitArray[1]); // orange
console.log(fruitArray[2]); // banana
//fruitObj 객체
var fruitObj = {
'0' : 'apple',
'1' : 'orange',
'2' : 'banana'
};
console.log(typeof fruitArray); //(출력값) object console.log(typeof fruitObj); //(출력값) object
👉 typeof 연산결과는 배열과 객체가 모두 object로 표기함
fruitArray.push('melon'); //['apple','orange','banana','melon'] fruitObj.push('melon'); //Uncaught TypeError: Object #<Object> has no method 'push'
fruitObj는 객체이므로 배열이 아니므로 push()메서드와 같은 표준 배열 메서드를 사용할 수 없다.
👉 배열과 객체가 자신의 부모인 프로토타입 객체가 서로 다르기때문이다.
console.log(fruitArray.length); //(출력값) 3 console.log(fruitObj.length); //(출력값) undefined
배열 fruitArray와 객체 fruitObj는 근본적 차이가 있음
fruitObj는 객체이므로 length 프로퍼티가 존재하지 X
👉 fruitArray.length는 3이 출력되지만 fruitObj.length 결과가 undefined인 이유
const obj01 = {
name: 'Hellow'
}
const obj02 = {
name: 'Hellow'
}
console.log(obj01 === obj02) //false
console.log(obj01.name === obj02.name) //true
객체는 변수에 저장될때 객체 자체를 그대로 저장하지 않고 객체가 담긴 메모리의 reference를 저장하기 때문이다.
객체를 콘솔창에 찍을때 [object Object]이렇게 출력되던데
대체 이게 먼지 궁금해서 찾아봤다.
모든 object 는 toString() 이라는 메소드를 가지고 있는데
이 메소드는 object 가 텍스트 값으로 표현될 때나 문자열 값으로 예상되는 방식으로 object 가 참조할 때 사용됩니다.
Object.prototype.toString 은 인자로 넘겨준 object 의 클래스 이름을 반환해주는 메소드다.toString 을 통해서 얻을 수 있는 값은 다양하게 있는데, 기본적으로 ECAMScript Edition 에 기재된 스펙을 기준으로 삼는다.