이 글은 자바스크립트 개론(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에 담긴다. object1object2의 주소값이 같기 때문에 object1 == object2true를 반환한다.
  • object3object1와 프로퍼티, 프로퍼티 값이 같지만 새로운 객체의 주소값이 담긴다. 따라서 object1 == object3false를 반환한다.

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와 같은 메서드를 사용할 수 없다.


+ Recent posts