이 글은 자바스크립트 개론(Eloquent JavaScript 번역서)를 읽고 개인적으로 정리한 내용입니다.
3. 객체와 배열
1. 프로퍼티
- 자바스크립트의 어떤 값은 그 값과 관련된 다른 값을 갖기도 하는데, 이것을 프로퍼티라고 한다.
- 예로 문자열 값에는
length
라는 문자열의 크기를 나타내는 프로퍼티가 있다.
2. 객체
- 문자열과 같은 값은 프로퍼티를 추가하거나 수정하는 것에는 제한적이다. 예로 문자열의 크기를 나타내는 length 프로퍼티는 변경할 수 없다.
- 객체는 자유롭게 프로퍼티를 추가, 수정, 제거를 할 수 있다.
- 객체의 프로퍼티에 접근하는 방법은 두 가지가 있다.
var object = { name: 'gyun' };
object['name'] // 'gyun'
object.name // 'gyun'
- 대괄호를 이용한 방법은 대괄호 안에 표현식을 넣어 접근할 수도 있다.
var s = 'name';
object[s] // 'gyun'
3. 객체 비교
- 숫자, 불린, 문자열 값은 같은 타입의 값을 비교하면 정확한 결과를 얻을 수 있다.
120 == 120 // true
true == true // true
'str' == 'str' // true
- 두 객체에
==
연산자를 적용하면 생각했던 것과 다른 결과가 나올 수 있다.
var object1 = {name: 'gyun'};
var object2 = object1;
object1 == object2 // true
var object3 = {name: 'gyun'};
object1 == object3 // false
var object2 = object1
에서는{name: 'gyun'}
객체가 담기는 것이 아니라object1
의 주소값이object2
에 담긴다.object1
와object2
의 주소값이 같기 때문에object1 == object2
는true
를 반환한다.object3
는object1
와 프로퍼티, 프로퍼티 값이 같지만 새로운 객체의 주소값이 담긴다. 따라서object1 == object3
은false
를 반환한다.
4. 배열
- 객체에 저장된 모든 프로퍼티를 처음부터 끝까지 접근하기 좋게 만든 것이 배열이다.
- 자바스크립트의 배열은 객체의 일종이다.
5. 메소드
- 함수를 담고 있는 프로퍼티를 메소드라고 한다.
6. 날짜
- 객체를 생성하는 방법에는 중괄호(
{ }
)말고도new
키워드와 생성자 함수를 이용한 방법도 있다. Date
는 자바스크립트에서 날짜 데이터를 다루기 위해 사용되는 생성자 함수다.
new Date() // 현재 시간의 날짜 객체 생성
new Date(2017, 11, 25) // 2017년 11월 25일의 날짜 객체 생성
Date
생성자 함수에는 년, 월, 일, 시, 분, 초, 밀리초 순서로 인자를 넘길 수 있다.- 날짜 객체는
<
,>
,<=
,>=
로 정확하게 날짜의 늦고 빠름을 정확하게 비교할 수 있지만,==
은 객체처럼 비교하기 때문에 정확한 결과를 얻을 수 없다. - 날짜가 같은지 비교할 때는 1970년 1월 1일부터 경과된 밀리초를 정수로 반환하는
getTime
메서드를 사용하면 된다.
var d1 = new Date(2017, 11, 25);
var d2 = new Date(2017, 11, 25);
d1 == d2 // false
d1.getTime() == d2.getTime() // true
7. 인자
- 함수가 호출될 때마다
arguments
라는 특별한 변수가 함수가 실행되는 환경에 담긴다. arguments
는 함수로 전달되는 모든 인자를 프로퍼티0
부터 순서대로 저장하는 것, 인자의 개수가length
프로퍼티에 담기는 것을 봤을 때 배열이라고 생각할 수도 있다.- 하지만
arguments
는 배열이 아니라 객체이고, 배열처럼push
,forEach
와 같은 메서드를 사용할 수 없다.