[code:js]
typeof maybeArray ==  "Array"; // 에, 농담이시죠?
maybeArray instanceof Array; // 어쩌면요
maybeArray.constructor == Array; // 어쩌면요
typeof maybeArray.sort == 'function'; // 비슷합니다
Object.prototype.toString.call(maybeArray) === '[object Array]'; // 딩 동 댕

자바스크립트를 처음 접하는 사람들은 어떤 객체가 실제로 배열인지 아닌지 알아내는 간단한 방법이 있을 것이라고 생각합니다. 고수들은 저 너머에 있는 위험을 알고 있습니다. 특히, 프레임 사이를 탐색하며 작업할 때의 문제를 말이죠. 자바 진영은 클래스 로더에 이런 문제가 있었는데, 다른 클래스 로더로부터 객체를 가져올 때 이상한 문제가 일어나곤 했습니다.

Kangax씨는 이 문제에 대해 자세히 다루며 기술적으로 새로운 해결책을 제시했습니다. 덕분에 Prototype과 그 외의 라이브러리들이 그들의 코드를 덕 타이핑에서 다음 코드로 바꿀 수 있게되었습니다.

[code:js]
function isArray(o) {
    return Object.prototype.toString.call(o) == '[object Array]';
}

from isArray: Why is it so bloody hard to get right?
Posted by 행복한고니 트랙백 1 : 댓글 3

댓글을 달아 주세요

  1. addr | edit/del | reply BlogIcon Gloridea 2009.01.13 10:50

    오오, 안그래도 이 문제 관련한 포스팅을 한 번 하려고 했었는데... 훨씬 좋은 글이 있었군요. -ㅅ- 소개 감사~

  2. addr | edit/del | reply 웹디황용 2009.01.16 17:05

    이런좋은방법이

  3. addr | edit/del | reply BlogIcon Naztica 2009.01.27 19:14 신고

    오늘 시간 나서 테스트 해봤는데...
    여전히 IE에서는 multi-frame 이슈가 해결되지 않네요... orz.