본문 바로가기

ECMAScript 2015, ECMAScript 6th Edition

6. Array-like

빌트인 오브젝트인 Array 의 경우 아래와 같은 4가지 특징을 가지고 있다.


1. length property 는 list 에 element 가 추가 될 때마다 자동으로 업데이트 된다.

( The length property is automatically updated as new elements are added to the list. )


2. length 를 줄이면 array 도 줄어든다.

( Setting length to a smaller value truncates the array. )


3. Arrays 들은 Array.prototype 으로 부터 method 를 상속 받는다. 이건 당연한 개념이겠지만 buildt in Array object 가 생성될때 Array 의 prototype 의 method 를 그래도 쓸수 있게 된다.

이는 javascript 의 상속 개념을 찾아보면 도움이 될것 같다!

( Arrays inherit useful methods from Array.prototype. )


4. Arrays (여기서 Array 는 buildt in Array object 를 가르키는 듯 하다 ) 들은 Array 의 class attribute 를 가지고 있다. )

( Arrays have a class attribute of “Array”. )


출처 : https://www.safaribooksonline.com/library/view/javascript-the-definitive/9781449393854/ch07s11.html


array-like 란 직접 Array method 를 호출할 수 있는건 아니지만 iterate 는 할 수 있다. 이 말이 무슨말인지 보기 전에 그러면 array-like object 라는게 무엇인지 좀 더 자세히 설명해보겠다. 간단히 말하자면 object 인데 key 가 0,1,2,3 ... 과 같은 index 이고 마지막으로 length property 의 값이 있으면 Array-like object 가 된다.


Make Array-like object sample 

var a = {};  // Start with a regular empty object

// Add properties to make it "array-like"
var i = 0;
while(i < 10) {
    a[i] = i * i;
    i++;
}
a.length = i;

// Now iterate through it as if it were a real ...




Q. 그래서 이걸 어따 쓰는지??

Array-like object 의 경우 Array object 처럼 for-in 과 for 문의 사용이 가능하다!!

sample

//sample 1
let values = {0: 1, 1: 2, length: 2};

for( var key in values) {
	console.log( key + ": " + values[key]);
}

for(var k = 0; k < values.length; k++) {
	console.log(values[k]);
}

//sample2
get(1, 2, 3);
function get() {
	console.log(Array.isArray(args));
	//false!!

	for(var key in args) {
		console.log(key, ':', args[key]);
	}

	for(var k = 0; k < args.length; k++) {
		console.log(args[k]); // Array-like 라는것을 알 수 있다!!
	}
}


'ECMAScript 2015, ECMAScript 6th Edition' 카테고리의 다른 글

7. destructuring  (0) 2016.09.13
0. 김영보 선생님 강의 후기  (0) 2016.09.11
5. rest  (0) 2016.09.07
4. spread  (0) 2016.09.06
3. iterable protocol  (0) 2016.09.04