
생성자로 객체를 생성할 떄는 new 연산자를 사용한다.
new 연산자로 객체를 생성할 것이라 기대하고 만든 함수를 생성자라고 부른다.
첫 글자를 대문자로 쓰는 파스칼 표기법을 사용하고, 생성자 안에서 this.프로퍼티 이름에 값을 대입하면 그 이름을 가진 프로퍼티에 값이 할당된 개체가 생성된다.
이때 this는 생성자가 생성하는 객체를 가르킨다.
생성자는 객체를 생성하고 초기화하는 역할을 한다.
생성자를 사용하면 이름은 같지만 프로퍼티 값이 다른 객체 여러개를 간단히 생성할 수 있다.
var card1 = new Card("하트", "A");
var card2 = new Card("클럽", "K");
var card3 = new Card("스페이드", "2");
자바스크립트에는 처음부터 사용할 수 있는 내장 객체가 마련되어 있다.
| 생성자 이름 | 생성되는 객체 |
|---|---|
| Object | 일반 객체 |
| String | 문자열 객체 |
| Number | 숫자 객체 |
| Boolean | 논리값 객체 |
| Array | 배열 |
| Date | 날짜와 시간을 다루는 객체 |
| Function | 함수 객체 |
| RegExp | 정규 표현식 객체 |
| Error | 오류 객체 |
| EvalError | eval() 함수와 관련된 오류를 표현하는 객체 |
| InternalError | 자바스크립트 내부에서 발생한 오류를 표현하는 객체 |
| RangeError | 값이 허용 범위르 ㄹ넘었을 때 발생한 오류를 표현하는 객체 |
| ReferenceError | 없는 변수를 참조할 때 발생한 오류를 표현하는 객체 |
| SyntaxError | 문법이 어긋날 때 발생한 오류를 표현하는 객체 |
| TypeError | 값이 기대한 타입이 아닐 때 발생한 오류를 표현하는 객체 |
| URIError | 잘못된 URL를 만났을 때 발생한 오류를 표현하는 객체 |
배열 리터럴은 쉼표로 구분한 값을 대괄호 []로 묶어서 표현한다.
var evens = [2, 4, 6, 8 ];
앞 코드에서 [...] 부분이 배열 리터럴이며 배열 값 하나를 배열 요소라고 부른다.
배열 요소에는 왼쪽부터 순서대로 번호가 매겨져 있다. 요소에 메긴 번호는 요소 번호 또는 인덱스라고 부른다.
배열 요소의 최대 인덱스 값 +1
var evens = [2, 4, 6, 8];
evens.length // -> 4
프로퍼티 값을 가리켜 배열 길이라고 부른다.
var a = ["A", "B", "C", "D"];
a.length = 2;
console.log(a) // -> ["A", "B"]
배열 길이보다 큰 정수 값을 대입하면 배열에 새로운 요소가 추가되지 않고 값만 바뀐다.
var evens = new Array(2, 4, 6, 8); // -> [2, 4, 6, 8] 생성
var empty = new Array(); // -> 빈 배열 생성
var a = new Array(2, 4); // -> 배열 리터럴 [2, 4] 생성
var various = new Array(3.14, "pi", true, {x: 1, y:2}, [2, 4, 6, 8]
특정 인덱스의 요소는 대괄호 연산자를 사용해서 읽거나 쓸 수 있다.
evens[2] // -> 6 (인덱스가 2인 요소, 세번째 요소)
push 메서드를 사용하면 요소 배열 끝에 추가할 수 있다.
var a = ["A", "B", "C"];
// case1
a[3] = D;
console.log(a) // -> ["A", "B", "C", "D"]
//case2
a.push("D");
console.log(a) // -> ["A", "B", "C", "D"]
delete 연사자를 사용하면 요소를 삭제해도 그 배열의 length 값은 바뀌지 않고 삭제한 요소만 사라진다.
delete a[1]
console.log(a) // -> ["A", undefined , "C", "D"]
배열에 요소를 추가하거나 제거하면 인덱스가 0부터 시작되지 않는 배열이 만들어진다. 이러한 배열을 희소 배열이라고 부른다.
var a = ["A", "B", "C"];
a[4] = D;
console.log(a) // -> ["A", "B", "C", undefined, "E"]
a[3]이 undefined로 표시되지만 실제로 저 요소는 없다.