자바스크립트

[자바스크립트] 4. 프로토타입 & 배열

반응형

프로토타입

자바스크립트의 모든 객체는 '자신의 부모 역할을 하는 객체와 연결'되어 있음

(객체지향의 상속 개념과 같은 것)

이러한 부모 객체를 자바스크립트에서는 '프로토타입'이라고 부른다.

console.dir(foo);


객체 리터럴로 생성한 프로퍼티와 함께 proto 프로퍼티가 존재함

이 프로퍼티가 foo객체의 부모 프로토타입 객체를 가리킴

모든 객체는 자신의 프로토타입을 가리키는 [[Prototype]]이라는 숨겨진 프로퍼티를 가진다.




배열

다른 언어와 달리 배열의 크기를 지정하지 않아도 된다. (굿..)

어떤 위치에 어느 타입의 데이터를 저장하더라도 에러가 발생하지 않는다. (구웃..)


배열 리터럴

var arr = ['a', 'b', 'c'];
console.log(arr[0]); // a

배열 내 인덱스값을 넣어서 접근


배열 요소 생성

var arr = []; // 빈 배열
console.log(arr[0]); // undefined

arr[0] = 1;
arr[2] = 'two';
arr[5] = true;

console.log(arr); // [1, undefined, "two", undefined, undefined, true]
console.log(arr.length); // 6

동적으로 배열 원소 추가 가능

순차적으로 넣을 필요 없이 원하는 인덱스 위치에 동적 추가가 가능하다.


length 프로퍼티

var arr = [0, 1, 2];
console.log(arr.length); // 3

arr.length = 2;
console.log(arr); // [0, 1]

length를 원하는 크기로 늘이거나 줄이면 배열 크기도 이에 맞게 변한다.


push 프로퍼티

var arr = [0, 1, 2];

arr.push(3);
console.log(arr); // [0, 1, 2, 3]

arr.length = 5;
arr.push(10);
console.log(arr); // [0, 1, 2, 3, undefined, 10]

length를 5로 늘리면 arr[4]는 빈 배열이 만들어지고, 그 이후 push를 했기 때문에 arr[5]에 push 값이 들어간다.


배열 프로퍼티 열거

for문을 사용하자

for (var prop in arr) {
  console.log(prop, arr[prop]);
}
// 동적 추가 프로퍼티까지 모두 출력

for ( var i = 0; i < arr.length; i++ ){
  console.log(i, arr[i]);
}
// 배열의 요소만 출력

유사 배열 객체

length를 프로퍼티로 가진 객체

이 객체는 push로 원소 추가 시 에러가 발생한다.

해결법 : apply() 메서드 사용

Array.prototype.push.apply(obj, ['add']);


반응형