js 배열 유형을 결정하는 4가지 방법 요약

伊谢尔伦
풀어 주다: 2017-07-18 11:42:45
원래의
1776명이 탐색했습니다.

js 배열 유형을 결정하는 메서드

메서드 중 하나instanceof

instance, 이름에서 알 수 있듯이 인스턴스, 예제이므로 인스턴스of는 변수가 객체의 인스턴스인지 확인하는 데 사용됩니다. , 이는 삼항 산술입니다---typeof

a 인스턴스 of b?alert("true"):alert("false")와 가장 큰 차이점은 //b 값은 판단하려는 데이터 유형이라는 점에 유의하세요. Array

와 같은 문자열이 아닙니다. 예:


var a=[];
console.log(a instanceof Array) //返回true
로그인 후 복사

Method Twoconstructor

W3C 정의의 정의: 생성자 특성은 이 객체를 생성한 배열 함수에 대한 참조를 반환합니다

반환된 객체에 해당하는 생성자입니다. 정의는 인스턴스오브와 일치하지 않지만 효과는 동일합니다

예: (배열 인스턴스) //Is an 인스턴스 of Array? true 또는 false

  (a.constructor == Array) // 인스턴스에 해당하는 생성자는 Array입니까? true 또는 false

예:


function employee(name,job,born){
 this.name=name;
 this.job=job;
 this.born=born;
}
var bill=new employee("Bill Gates","Engineer",1985);
console.log(bill.constructor); //输出function employee(name, jobtitle, born){this.name = name; this.jobtitle = job; this.born = born;}
로그인 후 복사

그러면 다양한 유형을 판단하는 방법은 다음과 같습니다.


console.log([].constructor == Array);
console.log({}.constructor == Object);
console.log("string".constructor == String);
console.log((123).constructor == Number);
console.log(true.constructor == Boolean);
로그인 후 복사

더 엄격하고 보편적인 방법:


function isArray(object){
 return object && typeof object==='object' &&
   Array == object.constructor;
}
로그인 후 복사

! ! 참고:

instanceof와 construcor를 사용할 때 판단되는 배열은 현재 페이지에서 선언되어야 합니다! 예를 들어, 페이지(상위 페이지)에는 프레임이 있고, 페이지(하위 페이지)는 프레임에서 참조되며, 이때 하위 페이지에 배열이 선언되고 해당 변수에 할당됩니다. Array == object.constructor; false를 반환합니다.

이유:

1. Array는 전송 과정에서 참조 주소만 전송됩니다.
2. 각 페이지의 Array 네이티브 객체가 참조하는 주소는 하위 페이지에 선언된 배열의 해당 생성자가 하위 페이지의 Array 객체이고 사용되는 배열입니다. 하위 페이지 배열과 같지 않습니다. 그렇지 않으면 문제를 추적하기가 어렵습니다.

방법 3특징적인 판단 방법

위의 방법들은 모두 확실한 결점을 가지고 있지만, 우리는 사람들의 지혜가 전능하다는 것을 믿어야 합니다. 우리는 몇 가지 특성에 기초하여 배열의 유형을 판단할 수 있습니다.

function isArray(object){
 return object && typeof object==='object' && 
   typeof object.length==='number' && 
   typeof object.splice==='function' && 
    //判断length属性是否是可枚举的 对于数组 将得到false 
   !(object.propertyIsEnumerable('length'));
}
로그인 후 복사

길이와 스플라이스는 객체에 속성을 추가할 수 있지만 길이 속성은 열거할 수 없기 때문에 반드시 배열일 필요는 없습니다. 이것이 가장 중요한 판단 요소입니다.

ps: 여기에서 propertyIsEnumerable 메소드를 대중화하세요:

object.propertyIsEnumerable(proName)

지정된 속성이 열거 가능한지 확인

참고: proName이 객체에 존재하고 For...In 루프를 사용하여 철저하게 종료하면 propertyIsEnumerable 속성이 true를 반환합니다. propertyIsEnumerable 속성은 개체에 지정된 속성이 없거나 지정된 속성이 열거 가능하지 않은 경우 false를 반환합니다.

propertyIsEnumerable 속성은 프로토타입 체인의 객체를 고려하지 않습니다.

예:

var a = new Array("apple", "banana", "cactus");
document.write(a.propertyIsEnumerable(1));
로그인 후 복사

방법 4

가장 간단한 방법

function isArray(o) {
 return Object.prototype.toString.call(o) === ‘[object Array]‘;
}
로그인 후 복사

위 내용은 js 배열 유형을 결정하는 4가지 방법 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿