변수의 배열 유형을 결정해야 하는 경우가 많습니다. JavaScript에서 변수가 배열 유형인지 확인하는 방법은 무엇입니까? 최근에 조사하여 모든 사람에게 도움이 되기를 바랍니다.
JavaScript에서 객체를 감지하는 방법
1.typeof 연산자
이 방법은 Function, 문자열, 숫자, 정의되지 않음 등이지만 배열 객체를 감지하면 작동하지 않습니다.
alert(typeof null) // " object"
alert(typeof function () {
return 1;
}); // "function"
alert(typeof 'Menglong Station'); // "string"
alert ( typeof 1); // "숫자"
alert(typeof a); // "정의되지 않음"
alert(typeof undefine); // "정의되지 않음"
alert(typeof []); " object"
2.instanceof 연산자 이 연산자를 이해하려면 먼저 JavaScript의 객체지향을 이해해야 합니다. . 이 연산자는 객체의 프로토타입 체인이 생성자의 프로토타입 객체를 가리키는지 여부를 감지하기 때문입니다.
var arr = [1,2,3,1];
alert(arr instanceof Array); // true
3. 객체의 생성자 속성 제외 인스턴스 오브(instanceof), 각 객체에는 배열 판단을 내리는 데 사용되는 생성자 속성도 있습니다.
var arr = [1,2,3 ,1] ;
alert(arr.constructor === Array); // true
두 번째와 세 번째 방법은 완벽해 보이지만 실제로는 여전히 허점이 있습니다. 프레임에서 앞뒤로 왕복하는 경우 이 두 가지 방법이 가장 좋습니다. 각 iframe에는 자체 실행 환경이 있으므로 프레임 간에 인스턴스화된 객체는 프로토타입 체인을 서로 공유하지 않으므로 위의 감지 코드가 실패하게 됩니다.
var iframe = document.createElement('iframe'); //iframe 생성
document.body.appendChild(iframe); / /본문에 추가
xArray = window.frames[window.frames.length-1].Array
var arr = new xArray(1,2,3) // 배열 선언 3]
alert(arr instanceof Array); // false
alert(arr.constructor === Array); // false
배열 유형 감지 위의 방법들은 완벽해 보이지만 결국 문제가 있을 것입니다. 다음으로 완벽하다고 할 수 있는 비교적 좋은 방법을 몇 가지 알려 드리겠습니다.
1.Object.prototype.toString Object.prototype.toString의 동작: 먼저 객체의 내부 속성 [[Class]]을 가져온 다음 이 속성을 기반으로 "[object Array]" 문자열이 결과로 사용됩니다. (ECMA 표준을 읽은 사람은 [[]]가 언어 내부적으로 사용되는 속성을 나타내는 데 사용되며 객체 배열에서 직접 액세스할 수 없다는 점을 알아야 합니다. 외부, "내부 속성"이라고 함). 호출과 결합된 이 방법을 사용하면 모든 객체의 내부 속성 [[Class]]을 얻은 다음 유형 감지를 문자열 비교로 변환하여 목적을 달성할 수 있습니다.
function isArrayFn (o) {
return Object.toString.call(o) === '[객체 배열]'
}
var arr = [1,2,3,1]
alert(isArrayFn(arr) );/ / 참
call은 toString의 this 참조를 감지할 객체로 변경하고 이 객체의 문자열 표현을 반환한 다음 문자열이 '[object Array]'인지 비교하여 Array의 인스턴스인지 확인합니다. 왜 직접 o.toString()을 사용하지 않습니까? Array가 Object에서 상속되기는 하지만 toString 메서드도 가지게 되지만 이 메서드는 다시 작성되어 요구 사항을 충족하지 못할 수 있으며 Object.prototype은 호랑이 엉덩이입니다. 감히 만지는 사람이 거의 없기 때문에 어느 정도 "순수함"은 보장될 수 있습니다 :)
JavaScript 표준 문서에서는 다음과 같이 정의합니다. [[Class]] 값은 다음 문자열 중 하나만 될 수 있습니다. : Arguments , Array, Boolean, Date, Error, Function, JSON, Math, Number, Object, RegExp, String
이 방법은 내장 개체를 식별할 때 매우 유용하지만 사용자 정의에는 이 방법을 사용하지 마십시오. 사물.
2.Array.isArray() ECMAScript5는 값이 배열인지 정확하게 감지할 목적으로 Array.isArray()를 JavaScript에 공식적으로 도입했습니다. IE9, Firefox 4, Safari 5, Opera 10.5 및 Chrome은 모두 이 방법을 구현합니다. 단, IE8 이전 버전은 지원되지 않습니다.
3. 더 나은 참조 위의 방법을 기반으로 현재 배열을 작성하는 가장 좋은 방법이 있습니다.
var arr = [1,2,3,1]
var arr2 = [{ abac : 1, abc : 2 }];
function isArrayFn(value){
if (typeof Array.isArray === "function") {
return Array.isArray(value);
}else 🎜> return Object.prototype.toString.call(value) === "[객체 배열]";
}
}
alert(isArrayFn(arr));// true
alert( isArrayFn( arr2));// true
JavaScript에서 변수가 배열 유형인지 확인하는 방법은 위의 내용이 JavaScript에서 변수가 배열 유형인지 확인하는 방법입니다. JavaScript가 모든 사람에게 도움이 되기를 바랍니다.