10.3 프로퍼티
var person = {
name: 'Lee', //프로퍼티 키:name, 프로퍼티 값: 'Lee',
age: 20 //프로퍼티 키:age, 프로퍼티 값: 20
}
- 프로퍼티를 나열할 때는 쉼표(,)로 구분
- 일반적으로 마지막 프로퍼티 뒤에는 쉼표를 사용하지 않지만, 사용해도 괜찮다.
- 프로퍼티 키
: 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
(**심벌 값 : ES6에 추가된 7번째 타입. 변경 불가능한 원시 타입의 값. 다른 값과 중복되지 않는 유일무이한 값. Symbol함수를 호출해 생성.)
1) 프로퍼티 값에 접근할 수 있는 이름으로서 '식별자 역할'을 한다.
하지만 반드시 식별자 네이밍 규칙을 따라야 하는것은 아니지만, 식별자 네이밍규칙을 준수하는 프로퍼티 키와 그렇지 않은 프로퍼티 키는 차이가 존재한다.
- 식별자 네이밍규칙을 준수하는 프로퍼티 키 : 따옴표 생략 가능
- 식별자 네이밍규칙을 준수하지 않는 프로퍼티 키 : 반드시 따옴표 사용
var person ={
firstName: 'Ung-mo', //식별자 네이밍 규칙을 준수하는 프로퍼티 키
'last-name': 'Lee' //식별자 네이밍 규칙을 준수하지 않는 프로퍼티 키
}
프로퍼티 키로 사용한 firstName은 식별자 네이밍 규칙를 준수하고 있다. 따라서 따옴표 생략 가능.
last-name은 -라는 특수문자가 포함되어 있다.
(**식별자 네이밍 규칙 : 식별자는 특수문자를 제외한 문자, 숫자, 언더스코어(_), 달러 기호($)를 포함할 수 있다. 즉 특수문자는 포함시킬수 없다.)
따라서 따옴표를 생략 불가능.
2) 프로퍼티 키를 동적으로 생성 가능
문자열 또는 문자열로 평가할 수 있는 표현식을 사용해 프로퍼티 키를 동적으로 생성 가능하다.
이 경우, 프로퍼티 키로 사용할 표현식을 대괄호([])로 묶어야 한다.
var obj = {};
var key = 'hello';
obj[key] = 'world'; //key가 아닌 'key' 이렇게 따옴표를 쓰면 'key'글자 그대로 키가 된다. ex: {key: "world"}
console.log(obj); // {hello: "world"}
3) 빈 문자열을 프로퍼티 키로 사용 가능.(하지만 권장 x)
var foo = {
'': ''
};
console.log(foo); //{"": ""}
4) 프로퍼티 키에 문자열, 심벌값 외의 값을 사용하면 문자열로 변환
예를 들면, 프로퍼티 키로 숫자 리터럴을 사용하면 따옴표는 붙지 않지만 내부적으로는 '문자열'로 변환된다.
var foo = {
0: 1,
1: 2,
2: 3
};
console.log(foo); // {0: 1, 1: 2, 2: 3} 프로퍼티 키인 0,1,2가 문자열로 변환됨.
5) 예약어를 프로퍼티 키로 사용 가능. (하지만 권장 x)
(** 예약어란? 프로그래밍 언어에서 사용되고 있거나 사용될 예정인 단어)
자바스크립트의 예약어 ex: await, break, case, catch, var, function, if...
var foo = {
var: '', //var:예약어
function: '' //function:예약어
};
console.log(foo); // {var: '',function: ''} 가능은 하다. 하지만 권장 x.
6) 이미 존재하는 프로퍼티 키를 중복 선언하면 나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어쓴다.
(에러 발생하지 않음!!!주의!!)
var foo = {
name: 'Lee',
name: 'Kim' //프로퍼티 키 중복선언! 나중 것이 전에 것을 덮어버린다.
};
console.log(foo); // {name: "Kim"}
- 프로퍼티 값
: 자바스크립트에서 사용할 수 있는 모든 값.
10.4 메서드
프로퍼티 값이 함수일 경우, 일반함수와 구분하기 위해 메서드(method)라고 부른다.
즉, 객체에 묶여있는 함수를 의미.
var circle = {
radius: 5, //프로퍼티
getDiameter: function (){ //메서드
return 2 * this.radius; //this는 자신이 속한 객체를 말한다. 여기서는 circle를 뜻한다.
}
}
console.log(circle.getDiameter()); //10 (2*5)
'JavaScript > 모던 자바스크립트 Deep Dive' 카테고리의 다른 글
실행 컨텍스트 (1) | 2023.12.08 |
---|---|
실행 컨텍스트 스택 (1) | 2023.12.08 |
10장 - 1. 객체 리터럴 (객체 / 객체 리터럴) (0) | 2022.02.01 |
1장. 프로그래밍 (0) | 2021.11.02 |