가장 먼저 생각할 것은 데이터 유형을 감지하기 위해 typeof를 사용하는 것이지만 Function, String, Number, Undefine 등 이러한 기본 유형의 경우 typeof를 사용하여 감지할 수 있습니다. 예를 들어 코드는
function test(){} console.log(typeof 1); // number console.log(typeof test); // function console.log(typeof "yunxi"); // string console.log(typeof undefined); // undefined
입니다. 그러나 array 또는 정규 표현식의 경우에는 다음과 같습니다. typeof를 사용하여 감지하면 만족할 수 없습니다. 왜냐하면 배열이나 일반 패턴을 감지하면 반환된 유형은 다음 코드와 같이 objectobject가 되기 때문입니다.
console.log(typeof []); // object console.log(typeof /\d+/g); // object
이를 통해 객체가 배열의 인스턴스인지 여부를 감지하는 데 인스턴스를 사용하는 것을 쉽게 생각할 수 있습니다. true를 반환하고, 그렇지 않으면 false를 반환합니다. 위의 코드를 살펴보고 배열인지 여부를 확인하겠습니다.
console.log([] instanceof Array); // true console.log(/\d+/g instanceof Array); // false
위와 같이, instanceof를 사용하면 실제로 배열 요소인지 확인할 수 있습니다. ;
javascript에서 각 객체에는 객체를 초기화하는 생성자 함수를 참조하는 생성자 속성이 있습니다. 예를 들어 알 수 없는 객체의 유형을 결정하는 것과 같이 다음과 같이 작성할 수 있습니다. 방법, 코드는 다음과 같습니다.
function isArray(obj) { return typeof obj == 'object' && obj.constructor == Array } // 测试demo console.log(isArray([])); // true var a = {"a":1}; console.log(isArray(a)); // false var b = [1,2,3]; console.log(isArray(b)); // true console.log(isArray(/\d+/g));// false
위에서 볼 수 있듯이 호출하여 배열 요소인지 여부를 확인할 수도 있습니다. isArray 메소드.
이제 두 번째와 세 번째 점에 대해 각각 인스턴스 오브 메소드와 생성자 속성을 사용하면 배열인지 여부를 확인할 수 있는 것으로 보이지만 크로스를 사용하는 경우와 같은 예외도 있습니다. 프레임 iframe 페이지에서 배열을 사용하는 경우 서로 다른 iframe에서 생성된 배열이 서로 프로토타입 속성을 공유하지 않기 때문에 실패합니다. 다음 코드 테스트를 통해 확인할 수 있습니다~
var iframe = document.createElement('iframe'); document.body.appendChild(iframe); xArray = window.frames[window.frames.length-1].Array; var arr = new xArray("1","2","3","4","5"); //这个写法IE下是不支持的,标准浏览器firefox,chrome下有 console.log(arr); // 打印出 ["1", "2", "3", "4", "5"] console.log(arr instanceof Array); // false console.log(arr.constructor === Array); // false
위 방법을 사용하면 됩니다. 객체가 배열인지 확인할 방법은 없습니다. 그러나 ECMA262에서는 Object.prototype.toString.call() 메서드를 사용하여 다음 코드를 통해 확인할 수 있습니다. 🎜>
위 내용은 JavaScript를 사용하여 객체가 배열인지 확인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!