복붙노트

[JQUERY] 왜 객체에 대해서 typeof 배열은 "개체"가 아닌 "배열"를 반환합니까? [복제]

JQUERY

왜 객체에 대해서 typeof 배열은 "개체"가 아닌 "배열"를 반환합니까? [복제]

해결법


  1. 1.자바 스크립트의 이상한 행동과 사양 중 하나는과 typeof 배열이 객체이다.

    자바 스크립트의 이상한 행동과 사양 중 하나는과 typeof 배열이 객체이다.

    변수가 방법의 몇 배열 인 경우 확인할 수 있습니다 :

    var isArr = data instanceof Array;
    var isArr = Array.isArray(data);
    

    그러나 가장 신뢰할 수있는 방법은 다음과 같습니다

    isArr = Object.prototype.toString.call(data) == '[object Array]';
    

    당신이 jQuery를 사용하여 질문을 태그 때문에, 당신은 jQuery를 끝나면 IsArray 기능을 사용할 수 있습니다 :

    var isArr = $.isArray(data);
    

  2. 2.사양을 인용

    사양을 인용

    그리고 여기에 대해서 typeof를위한 테이블의

    몇 가지 배경을 추가하려면 자바 스크립트에서 두 개의 데이터 유형이있다 :

    자바 스크립트의 객체는 연관 배열 / 대부분의 객체 지향 언어는 본 사전 구조가 유사하다 - 즉, 그것은 키 - 값 쌍들의 세트를 가진다.

    배열은 다음과 같은 속성 / 키 객체로 간주 될 수있다 :

    대해서 typeof 배열 객체를 반환 이유에서이 도움이 창고는 더 많은 빛 바랍니다. 건배!


  3. 3.이 예제를 시도하고 당신은 자바 스크립트에서 연관 배열과 객체 사이의 차이가도 이해합니다.

    이 예제를 시도하고 당신은 자바 스크립트에서 연관 배열과 객체 사이의 차이가도 이해합니다.

    연관 배열

    var a = new Array(1,2,3); 
    a['key'] = 'experiment';
    Array.isArray(a);
    

    true를 돌려줍니다

    길이는 키로 취급되기 때문에 a.length이 정의되지 않습니다 것을 명심하십시오, 당신은 연관 배열의 길이를 얻을 수 Object.keys (A) .length를 사용해야합니다.

    목적

    var a = {1:1, 2:2, 3:3,'key':'experiment'}; 
    Array.isArray(a)
    

    반환 거짓

    JSON는 연관 배열을 반환 할 수 ... 개체를 반환 ...하지만 그렇게하지 않습니다


  4. 4.코드에는 일반 JS 배열이 없습니다. 데이터는 원시 JS 객체이다. 브래킷의 다른 유형의 다른 의미의주의 :

    코드에는 일반 JS 배열이 없습니다. 데이터는 원시 JS 객체이다. 브래킷의 다른 유형의 다른 의미의주의 :

    var someArray = [];
    var someObject = {};
    
  5. from https://stackoverflow.com/questions/12996871/why-does-typeof-array-with-objects-return-object-and-not-array by cc-by-sa and MIT license