Javascript 에서 변수 배열입니다 있는지 어떻게 해야 할까요?

I would like to check 서버인지에 가변입니다 어레이나 하나에 단일 값으로 JavaScript 로.

나는 해결책을 찾아냈다.

if (variable.constructor == Array)...

이를 확인할 수 있는 최선의 방법은 로만스였나 완료했습니까?

질문에 대한 의견 (8)
해결책

체크 경우 여러 가지 방법으로 가변적입니다 배열입니다 방관하겠나 최적의 솔루션이라는 선택했음을. 1.

variable.constructor === Array

이것이 가장 빠른 방법 및 가장 가능성 있는 구글 크롬, 다른 모든 브라우저. 그래서 모든 어레이입니다 오브젝트에도 확인 과정을 구성자를 속성은 파르게 JavaScript engine.

속성은 배열입니다 객체에는 경우 문제가 있을 경우 발견사항 아웃해야 있는지 먼저 속성이 있기 때문이다.

variable.prop && variable.prop.constructor === Array

일부 다른 방법은 다음과 같습니다.

Array.isArray(variable)
  • 업데이트 23일 5월 2019년, 내 구주 예수님 (75) 이 있는 데 대해 다시 나를 @anduandrici 디스테이징할 크롬 사용하여 그의 질문 * 이 못난 내 의견으로는, 마지막 하나는 것인데, 이 중 &lt s&gt slowest&lt /s>;;; 가장 빠른. 실행 속도가 약 1/5 로, 첫 번째 example.&lt /s&gt s&gt <;; 이 녀석은 천천히, 그러나 it& 약 2-5% # 39 의 예쁜 말하기. 솔리드로 사용할 수 있습니다! 결과는 매우 감동했다. 아리스프로토티페, 실제로는 어레이에서는. 여기에 대한 자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray 읽을 수 있습니다
variable instanceof Array

이 방법은 약 1/3 이 speed&lt /s&gt s&gt 런입니다 <;;; 첫 번째 예는 있다. # 39 는 여전히 예쁜 솔리드로 경우, re 관한 모든 것은 너무 예쁜 you& 클리너, 코드 및 성능에 대한. 참고로 검사 등 '숫자' 항상 '거짓' 되돌려줍니다 instanceof 가변적입니다 숫자임 작동하지 않습니다. 업데이트: '지금' instanceof 댁이라면 2/3 속도로!

  • 그래서 또 다른 업데이트 *
Object.prototype.toString.call(variable) === '[object Array]';

이 사람 은 최저속 알리기 위한 어레이에서는 확인할 수 있습니다. 하지만 이는 원스톱 쇼핑 you& 모든 유형에 대해 # 39, re 찾고 있습니다. 그러나 이후 가장 빠른 방법을 찾고, re 어레이에서는 you& # 39 위에 됩니다.

그리고, 내가 실행했음 일부 테스트: 그래서 http://jsperf.com/instanceof-array-vs-array-isarray/35 재미 및 체크아웃합니다.

참고: (Jsperf.com) 는 다른 테스트입니다 @escapenetscape 창조하 아래에있어. http://jsben.ch/ # / 크기라프 smartupdate 때마다 다시 온라인 에스페르프 그때그들은 시찰단은 원래 링크를 싶었다.

해설 (25)

사용할 수도 있습니다.

if (value instanceof Array) {
  alert('value is Array!');
} else {
  alert('Not an array');
}

이 날 것 같다, 그러나 매우 세련된 솔루션이므로 각 자신의.

편집:

Vmware. ES5 이제 있다.

Array.isArray(value);

하지만 이렇게 하면 구형 브라우저를 사용하지 않는 한 브레이크의 폴리필스 (기본적으로. IE8 또는 이와 유사한).

해설 (13)

여러 가지 솔루션을 통해 자신의 모든 쿼크. 이 페이지 에 좋은 개요입니다. 하나의 해법은 입니다.

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]'; 
}
해설 (4)

하지만 난 모르는 사람이 언급한 건 물론, jQuery didn& # 39 좁히어 인턴이었을때를 ['리자이 ()'] (http://api.jquery.com/jQuery.isArray/) 함수. 또 버전 1.3 전송되었기 나타났다.

jQuery 는 피터 제안됩니다 있기 때문이다.

isArray: function( obj ) {
    return toString.call(obj) === "[object Array]";
},

이미 많은 어려움을 겪고 있다고 믿고 동일팔레트에 포함한다 (특히 크로스 브라우저 호환성을 그들의 기술에 대해) 로 업그레이드 버전 1.3 및 사용 내아기마저도 인컨텍스트 그들의 기능 (너무 많은 문제를 야기할 싫어하겠어 업그레이드하기를 제공하면서) 또는 이 방법을 사용하여 내 코드를 직접 제안했다.

많은 제안을 주셔서 감사합니다.

해설 (2)

최근의 브라우저에서 할 수 있습니다 (일부는 기존 브라우저)

Array.isArray(obj)

(에서 지원하는 크롬, 사파리, 오페라, 파이어폭스 4.0 인터넷 익스플로러 9 와 5 (5)

이전 버전의 IE 를 지원하는 데 필요한 경우 심 es5 에 폴리필 라이드리자이 사용할 수 있습니다. 또는 추가 정보정의다음

# only implement if no native implementation is available
if (typeof Array.isArray === 'undefined') {
  Array.isArray = function(obj) {
    return Object.prototype.toString.call(obj) === '[object Array]';
  }
};

Jquery 를 사용하는 경우 사용할 수 있습니다 (목표) '또는' '제크리스리자이 $ 스리자이 (목표)'. 밑줄 (목표) '' _.isArray 사용할 경우 사용할 수 있습니다.

39 don& 경우, 다른 프레임으로 만들어진 't need to 탐지합니다 어레이에는 instanceof' 그냥 사용할 수도 있습니다.

obj instanceof Array
  • 참고 *: 이 함수의 인수가 액세스하려면 사용할 수 있는 '키워드' 인수만 isn& # 39, t (대개) 한 경우에도 어레이에서는 같이 동작합니다.

<! - begin 스니핏: js 숨기십시오: 거짓값 콘솔: 진정한 바벨. &gt 거짓값 -;

var func = function() {
  console.log(arguments)        // [1, 2, 3]
  console.log(arguments.length) // 3
  console.log(Array.isArray(arguments)) // false !!!
  console.log(arguments.slice)  // undefined (Array.prototype methods not available)
  console.log([3,4,5].slice)    // function slice() { [native code] } 
}
func(1, 2, 3)

끝 - &lt 스니핏 >;!

해설 (2)

그러나 이것은 오래된 질문 한 번 못 찾았다고 동일한 문제가 매우 세련된 솔루션으로 공유하지는 싶다.

프로토타입 (prototype) 을 어레이입니다 추가에는 때문에 아주 단순해졌습니다

Array.prototype.isArray = true;

이제 한 개체를 확인하기 위해 사용하는 경우 테스트하려면 어레이에서는 all you need is 새 속성에 대한 확인할 수 있다.

var box = doSomething();

if (box.isArray) {
    // do something
}

그 어레이에서는 리자이 경우에만 사용할 수 있습니다

해설 (8)

통해 크록 포드:

function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (value instanceof Array) {
                s = 'array';
            }
        } else {
            s = 'null';
        }
    }
    return s;
}

크록 포드 언급은 하지 않을 경우 확인할 수 없는 어레이에는 제대로 만든 (주) 는 다른 컨텍스트로, 예를 들어, '창'.

이 경우 해당 페이지를 는 훨씬 더 복잡한 버전 충분하지 않습니다.

해설 (0)

개인적으로 Peter& 같은 # 39 의 제안: https://stackoverflow.com/a/767499/414784 (ECMAScript for 3. Ecmascript for 5 () ',' 라이드리자이 사용)

그러나 대한 의견을 게시물로의 나탸내도록 경우 'toString ()' 가 변경일 전혀 체크 이쪽요 어레이에서는 실패합니다. 진짜 원한다면 'toString ()' 및 smartupdate 고유해야 바꾸지 않은 문제가 없고 객체에는 클래스 속성 (' [객체에는 어레이입니다]' 는 있는 오브젝트의 클래스 속성 배열입니다), 그럼 내가 일을 추천합니까 다음과 같습니다.

//see if toString returns proper class attributes of objects that are arrays
//returns -1 if it fails test
//returns true if it passes test and it's an array
//returns false if it passes test and it's not an array
function is_array(o)
{
    // make sure an array has a class attribute of [object Array]
    var check_class = Object.prototype.toString.call([]);
    if(check_class === '[object Array]')
    {
        // test passed, now check
        return Object.prototype.toString.call(o) === '[object Array]';
    }
    else
    {
        // may want to change return value to something more desirable
        return -1; 
    }
}

참고로 이 7.10, JavaScript, 명확한 가이드 ' ()' 가 6 일 에디션입니다 썻냐면 라이드리자이 구현됩니까 ' ()' 을 사용하여 오브ject.프로토티페스투스트링스콜 ECMAScript 5. 또한, re going 걱정하지 않을 수 없다 '' & # 39 you& 경우 toString (), s # 39 구축상의 변경, 다른 모든 기능이 내장됨 메서드입니다 변경됩니까 너무 걱정은 할 수도 있습니다. 사용하는 이유는 누름식 () '?' 누군가 변경할 수 있습니다! 이런 방식은 어리석은. 솔루션을 제공하는 'toString () 는 그 위의 확인란 우려하고 있지만, I believe' 변경됩니까 해당 검사가 필요 없습니다.

해설 (2)

39 만 5, re you& 경우 EcmaScript 다루는 '' 기능이 내장된 라이드리자이 잔인하니 어졌다면 사용할 수 있습니다.

예:

Array.isArray([])    // true
Array.isArray("foo") // false
Array.isArray({})    // false
해설 (0)

이 때 나는 이 질문을 게시하기를 버전의 JQuery 를 사용하여 # 39, t '기능이 포함된' 리자이 didn& 거라고. 나는 그냥 해도 없었다면 아마도 믿고 수행할 수 있는 최고의 사용되었기 구축현 있지만브라우저에 독립된 이 특정 유형 검사.

이제 난 항상 flfile. JQuery 는 이후 이 기능을 제공하는 것이 특징이다.

$.isArray(obj);

(vmware. 버전 1.6.2) 의 형식으로 사용하는 것은 아직도 구현됩니까 문장열 비교

toString.call(obj) === "[object Array]"
해설 (0)

이미 다른 사람들을 위한 추가 옵션을 사용할 수 있을 것이라고 생각한다 언더스코엘가이스 라이브러리란 그들의 스크립트입니다. 언더스코엘가이스 리자이 () 는 함수 (참조 http://underscorejs.org/ # 리자이).

_.isArray(object) 

&gt. 있으면 참 객체에는 되돌려줍니다 배열입니다.

해설 (2)

각, 앙굴라스터리자이 () 함수를 사용하는 경우 사용할 수 있습니다.

var myArray = [];
angular.isArray(myArray); // returns true

var myObj = {};
angular.isArray(myObj); //returns false

http://docs.angularjs.org/api/ng/function/angular.isArray

해설 (1)

39 의 Crockford&, s JavaScript 좋은 부품 인수 배열입니다 주어진 함수 여부를 확인할 수 있습니다.

var is_array = function (value) {
    return value &&
        typeof value === 'object' &&
        typeof value.length === 'number' &&
        typeof value.splice === 'function' &&
        !(value.propertyIsEnumerable('length'));
};

그는 설명했다.

&gt. 먼저 하나님께용서를 값이 트루시. 우리가 이 일을 거부하려면 nulll 및 기타 파우시 값. # 39, & # 39 하나님께용서를 그런 수행되는 경우 값이 object&;. 이는 진정한 객체에는, 스토리지, (이상하게) nulll. 셋째, 우리는 묻지 않을 수 있는 속성 값을 갖는 길이 있다. 이렇게 하면 항상 의 경우도 있지만, 보통 어레이에는 객체에는. 넷째, 우리는 스플라이스를 하나님께용서를 값이 포함된 메서드입니다. 이 모든 어레이에는 다시 적립율은 해당됩니다. 마지막으로 묻고 디스테이징하는 속성은 열거 (윌 길이 에 의해 생성될 루프?). 거짓값 되는 모든 배열입니다. 이것이 가장 안정적인 시험 아라인스 보유하고 있는 것으로 나타났다. 안타까운 것은 너무나 복잡하다.

해설 (1)

The universal 방법은 다음과 같습니다.

Object.prototype.toString.call(obj)=='[object Array]'

Ecma 스크립트 부터 5 형식 솔루션은:

Array.isArray(arr)

또한 이전 자바스크립트 라이브러리 솔루션 it& # 39 의 충분히 정확하지 않지만 아래에서 찾을 수 있습니다.

var is_array = function (value) {
    return value &&
    typeof value === 'object' &&
    typeof value.length === 'number' &&
    typeof value.splice === 'function' &&
    !(value.propertyIsEnumerable('length'));
};

이 솔루션은 (http://www.pixelstech.net/topic/85-How-to-check-whether-an-object-is-an-array-or-not-in-JavaScript) 에서

해설 (0)

난 이 선을 사용하여 코드:

if (variable.push) {
   // variable is array, since AMAIK only arrays have push() method.
}
해설 (1)

코드 함) 에서 https://github.com/miksago/Evan.js/blob/master/src/evan.js

  var isArray = Array.isArray || function(obj) {
    return !!(obj && obj.concat && obj.unshift && !obj.callee);};
해설 (2)

[W3schools] 에서 1:

function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}
해설 (0)

가진 자들에 대한 테스트, 불안정한 코드 골프 적은 문자:

function isArray(a) {
  return a.map;
}

이는 한 때 주로 사용되는 / 병합 탐색 구조:

function golf(a) {
  return a.map?[].concat.apply([],a.map(golf)):a;
}

input: [1,2,[3,4,[5],6],[7,[8,[9]]]]
output: [1, 2, 3, 4, 5, 6, 7, 8, 9]
해설 (0)

내 생각엔 미로비스콘스트라우스 = 객체 및 미라이스컨스트라우스 = 어레이입니다 사용하는 것이 최선이다. 그 아찔했어 20x 사용하는 것보다 빠르게 toString (). 그 생성 및 확장할 경우 자신의 것으로 간주되려면 objects&quot 구성자를 객체에는 스맥랜드의 "; # 39 이 일을 하지만, 그렇지 않으면 그 길로 가는 게 아니라 보다 doesn& 가속화합니다. 하지만 이 방법은 메리 페로프 & # 39 는 그냥 빨리 구성자를 메리 페로프 [] = object& # 39;; 진정한 되돌려줍니다 경우가 많이 하는 것은 바람직하지 않다고 말했습니다. http://jsperf.com/constructor-vs-tostring

가 오류를 발생시킬 수 있어 유의할 것은 누얼스컨스트라우스 경우 null 값을 먼저 확인 할 수 있으면 어떻게 (테스트딩! = null) {}

해설 (0)

내가 이 조금 코드 복귀하십시오 hotenough. 수 있는 진정한 유형.

39 의 성능에 대해 확신하지 못하고 있지만, 나는 아직 제대로 식별합니까 시도가 it& 수행되는.

또한 여기에 대해 조금은 http://www.jqui.net/jquery/better-typeof-than-the-javascript-native-typeof/ 블로그 (https://github.com/valtido/better-typeOf)

현재 메리 페로프 작동하잖아 비슷하다.

var user = [1,2,3]
typeOf(user); //[object Array]

이 필요할 수 있다고 생각하고 조금 미세 조정, 그리고 내가 제대로 고려하지 않은 것을 발견한 또는 테스트. # 39 의 성능 개선 사항이 있는지, 그래서 더 현명한 않거나 잘못 re 포팅 메리 페로프 it& 환영하고 있다.

해설 (0)