객체
객체란? 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 key, value로 이루어져있다.
일반적으로 마지막 프로퍼티 뒤에는 쉼표를 사용하지 않으나 사용해도 좋다.
var person = {
// key value
name : "kiwon", //하나의 프로퍼티
age : "28",
};
자바스크리트는 프로토타입 기반 객체 지향 언어로서 클래스 기반 객체지향 언어와는 달리 다양한 객체생성 방법을 지원한다.
- 객체 리터럴
- Object 생성자 함수
- 생성자 함수
- Object.create 메서드
- 클래스(ES6)
이 중에서 가장 일반적이고 간단한 방법은 객체 리터럴을 사용한다.
변수에 할당되는 시점에 자바스크립트엔진은 객체 리터럴을 생성한다.
var person2 = {
name: "hyun",
sayHello : function() {
console.log(`Hello my name is ${this.name}`);
}
};
console.log(typeof person2);
console.log(person2);
프로퍼티를 생성할 때 식별자 네이밍 규칙을 따르지 않는 이름에는 반드시 따옴표를 해줘야 한다.
var person3 = {
name: "hyunki",
"last-name": "won", //따옴표를 사용하지 않으면 -연산자가 있는 표현식으로 해석한다.
};console.log(person3)
프로퍼티를 동적으로 생성할 수도 있다.
var obj = {};
var key = "hello";
obj[key] = "world!!!";
console.log(obj); //{hello: world!!!}
메서드
자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값으로 사용가능 하다.
함수도 값으로 취급할 수 있기 때문에 프로퍼티 값으로 사용할 수 있다.
프로퍼티 값이 함수일 경우 일반 함수와 구분하기 위해 메서드라 부른다.
var circle = {
radius: 5,
getDiameter: function(){
return 2 * this.radius; //this는 circle을 가리킨다
}
}
//this는 객체 자신을 가리키는 참조변수다.
console.log(circle.getDiameter()); //10
프로퍼티 접근
- 마침표 프로퍼티 접근(.)
- 대괄호 프로퍼티 접근([])
대괄호 표기법을 사용한느 경우 키는 반드시 따옴표로 묶어줘야 한다.
-프로퍼티 값 갱신-
var person5 = {
name: "kiwon",
}
person5.name = "won";
console.log(person5.name);
-프로퍼티 동적 생성-
var person6 = {
name: "kiwon",
};
person6.age = 20;
console.log(person6) //{name: "kiwon", age: 20};
-프로퍼티 삭제-
delete 연산자는 객체의 프로퍼티를 삭제한다.
존재하지 않는 프로퍼티를 삭제하면 아무런 에러 없이 무시된다.
var person7 = {
name: "kiwon",
}
delete person7.age;
console.log(person7)
person7.age = 20;
console.log(person7)
delete person7.age;
console.log(person7)
ES6에서는 프로퍼티 값으로 변수를 사용하는 경우 변수 이름과 프로퍼티 키가 동일한 이름일 때 값을 생략할 수 있다.
let x = 7, y = 10;
var person8 = {
x, y
};
console.log(person8);
ES6에서는 메서드를 정의할 때 function키워드를 생략이 가능하다.
const obj2 = {
name: "kiwon",
sayHello(){ //function 생략가능
console.log(`hi ${this.name}`);
}
};
obj2.sayHello();
'WEB > JS' 카테고리의 다른 글
[JS] recursive // callback (2) | 2023.11.25 |
---|---|
[JS] 함수 (1) | 2023.11.25 |
[JS] 단축 평가 (0) | 2023.11.19 |
[JS] 타입 변환 (0) | 2023.11.19 |
[JS] 블록문 (1) | 2023.11.19 |