Javascript에서 객체가 배열인지 확인하는 가장 좋은 방법은 무엇입니까?
-
05-07-2019 - |
문제
다음과 같은 기능이 있다고 가정해 보겠습니다.
function foo(bar) {
if (bar > 1) {
return [1,2,3];
} else {
return 1;
}
}
그리고 내가 전화한다고 말해요 foo(1)
, 배열을 반환하는지 여부를 어떻게 알 수 있나요?
해결책
이 기능을 사용합니다.
function isArray(obj) {
return Object.prototype.toString.call(obj) === '[object Array]';
}
그 방법입니다 jQuery.isarray 구현되었습니다.
이 기사를 확인하십시오 :
다른 팁
if(foo(1) instanceof Array)
// You have an Array
else
// You don't
업데이트: 사람들이 여전히 스스로 시도해보지 않으면 작동하지 않을 것이라고 주장하고 있기 때문에 아래 댓글에 답변해야 합니다.
일부 다른 개체의 경우 이 기술이 작동하지 않습니다(예:""instanceof String == false), 그러나 이것은 Array에서 작동합니다.IE6, IE8, FF, Chrome 및 Safari에서 테스트했습니다. 아래에 댓글을 달기 전에 직접 사용해 보고 확인해 보세요.
다음은 JavaScript에서 가져 오는 매우 신뢰할 수있는 방법 중 하나입니다. O'Reilly가 출판 한 The Good Parts :
if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' &&
!(my_value.propertyIsEnumerable('length')) { // my_value is truly an array! }
나는 당신 자신의 기능으로 그것을 포장하는 것이 좋습니다.
function isarray(my_value) {
if (my_value && typeof my_value === 'object' && typeof my_value.length === 'number' &&
!(my_value.propertyIsEnumerable('length'))
{ return true; }
else { return false; }
}
ES5가 있습니다 isArray
.
Array.isArray([]) // true
솔루션을보다 일반적으로 만들려면 실제로 배열 객체인지 신경 쓰지 않을 수 있습니다. 예를 들어, document.getEmentsByName ()은 "배열처럼 작용하는"개체를 반환합니다. 객체에 "길이"속성이있는 경우 "배열 준수"를 가정 할 수 있습니다.
function is_array_compliant(obj){
return obj && typeof obj.length != 'undefined';
}
제휴하지 않습니다 StackOverflow