Array.isArray와 instanceof Array 사용의 차이점
배열이 배열인지 객체인지 알아내는 방법에는 두 가지가 있습니다. 사용 typeof item === "object";
배열이 자바 스크립트에 비교적 새로운 및 배열 객체의 프로토 타입이기 때문에 객체 및 배열에 대해 true를 반환합니다 (이 잘못을 말로 수도, 정정 해줘 주시기 바랍니다). 그래서 내가 아는 두 가지 방법은 Array가 Array인지 확인하는 것입니다.
해결책 1 :
Array.isArray(item);
해결 방법 2 :
item instanceof Array;
내 질문은 다음과 같습니다.
- 이 두 솔루션의 차이점은 무엇입니까?
- 이 두 가지 중 선호하는 솔루션은 무엇입니까?
- 처리 시간이 더 빠른 것은 무엇입니까?
1.이 두 솔루션의 차이점은 무엇입니까?
isArray 는 ES5 메서드이므로 이전 브라우저에서는 지원되지 않지만 객체가 Array인지 확실하게 결정합니다.
instanceof 는 Array.prototype 이 객체의[[Prototype]]
체인에있는지 확인합니다. 인스턴스에 사용되는 Array 생성자가 테스트에 사용 된 것과 다를 가능성이 높기때문에 프레임에서 배열을 확인할 때 실패합니다.
2.이 두 가지 중 선호하는 솔루션은 무엇입니까?
"선호"는 몇 가지 선택 기준을 가정합니다. 일반적으로 선호되는 방법은 다음과 같습니다.
if (Object.prototype.toString.call(obj) == '[object Array]')
ES3 브라우저에 적합하고 여러 프레임에서 작동합니다. ES5 브라우저 만 고려한다면 isArray 는 괜찮을 것입니다.
3. 처리 시간이 더 빠른 것은 무엇입니까?
둘 다에 대한 처리 시간이 무시할 수 있기 때문에 거의 관련이 없습니다. 신뢰할 수있는 것을 선택하는 것이 훨씬 더 중요합니다. Array.isArray의 방법은 내장에 사용하지 않는 브라우저에 추가 할 수 있습니다 :
if (!Array.isArray) {
Array.isArray = function(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
}
}
차이 사이
Array.isArray(item)
와item instanceof Array
Felix Kling이 댓글에서 언급했듯이
instanceof Array
iframe에서 작동하지 않습니다. 구체적인 예를 제공하려면 다음 코드를 시도해보세요.var iframeEl = document.createElement('iframe'); document.body.appendChild(iframeEl); iframeArray = window.frames[window.frames.length - 1].Array; var array1 = new Array(1,1,1,1); var array2 = new iframeArray(1,1,1,1); console.log(array1 instanceof Array); // true console.log(Array.isArray(array1)); // true console.log(array2 instanceof Array); // false console.log(Array.isArray(array2)); // true
위의 예에서 볼 수 있듯이 iframe에서 Array 생성자로 생성 된 배열 (예 :)
array2
을 사용할 때 배열로 인식되지 않습니다instanceof Array
. 그러나를 사용할 때 배열로 올바르게 식별됩니다Array.isArray()
.If you are interested in knowing why
instanceof Array
doesn't work across different globals (i.e.iframe
orwindow
), you can read more about it on here.Which of these two is the preferred solution?
In most cases
instanceof Array
should be enough. However, sinceinstanceof Array
doesn't work correctly acrossiframes
/window
,Array.isArray()
would be more robust solution.Make sure to check for browser compatibility though. If you need to support IE 8 or less,
Array.isArray()
won't work (see Mozilla's doc).Which has a faster process time?
According to this jsperf,
instanceof Array
is faster thanArray.isArray()
. Which makes sense, becauseArray.isArray()
performs more robust checking and therefore takes a slight performance hit.
ReferenceURL : https://stackoverflow.com/questions/22289727/difference-between-using-array-isarray-and-instanceof-array
'IT이야기' 카테고리의 다른 글
AngularJS : 지시문의 브로드 캐스트 이벤트 (0) | 2021.04.24 |
---|---|
NSURLSession과 함께 NSOperationQueue 사용 (0) | 2021.04.24 |
AngularJS 오류 : $ injector : unpr 알 수없는 공급자 (0) | 2021.04.24 |
LIMIT / OFFSET을 사용하여 쿼리를 실행하고 총 행 수도 가져옵니다. (0) | 2021.04.24 |
도커 ENV VS RUN 내보내기 (0) | 2021.04.23 |