유사배열 놀이

jQuery를 가지고 놀던중에...

반환값이 Object인데도 불구하고 fireBug나 크롬에서 array처럼 반환되는 것을 확인할 수 있다.

ex>
$('a')
>> [<a href="http://vjeux.com/">vjeux</a>, <a href="http://google.com/">google</a>]


어떻게 했을까?

console.dir을 찍으면

>> e.fn.e.init[1]

값이 나온다 클릭하여 펼쳐보자

e.fn.e.init[1]

  1. 0HTMLAnchorElement
  2. contextHTMLDocument
  3. length1
  4. selector"#sdf"
  5. __proto__Object[0]


이렇게 나오는것을 확인할 수 있다.

다른 유사객체인 Argument, NodeList를 비교해서 확인해 보자.

NodeList[1]
  1. 0HTMLDivElement
  2. length1
  3. __proto__NodeList
    1. constructorfunction NodeList() { [native code] }
    2. itemfunction item() { [native code] }
    3. __proto__Object


두가지 공통점을 발견할수 있다. 

인덱스가 0,1... 처럼 생겼다.

length값을 가지고 있다.



그럼 

obj = { 0: 'a', 1:'b', length:2};

이렇게 하면 위와 똑같이 나올까?

실험을 해보기로 했다.



console.log로 찍으면

>> Object

로 나온다.

무언가 부족한거 같다.



구글링을 통해 어떻게 만드는것일까 찾아보았다.

그랬더니....

  • [0 .. length - 1]: Array elements
  • length: Set to a positive integer
  • splice: Any function (even empty)

요소가 필요하다 한다.

실제로 해당 요소를 넣고 아까 객체를 다시 만들어 보자.

obj = { 0: 'a', 1:'b', length:2, splice: function() {}};

>>
[
"a", "b"]


결론

다소 뻘짓이고 별 쓰잘때기도
없다.



참고
싸이트

댓글

이 블로그의 인기 게시물

javascript ===, ==, >=, <=연산자

SQL oracle 내장함수[문자열 처리]

java 입출력2