[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