가장 먼저 생각할 것은 typeof를 사용하여 데이터 유형을 감지하는 것이지만 Function, String, Number와 같은 기본 유형에 대해서는 정의되지 않은 등. typeof를 사용하여 감지할 수 있습니다. 예를 들어 코드는 다음과 같습니다.
function test(){} console.log(typeof 1); // number console.log(typeof test); // function console.log(typeof "yunxi"); // string console.log(typeof undefined); // undefined
그러나 배열이나 정규식의 경우 typeof를 사용하여 감지하면 만족스럽지 않습니다. 또는 정규 표현식을 사용하면 다음 코드와 같이 반환된 유형이 객체가 됩니다:
console.log(typeof []); // object console.log(typeof /\d+/g); // object
이로부터 우리는 객체가 객체인지 여부를 감지하기 위해 인스턴스of를 사용하는 것을 쉽게 생각할 수 있습니다. 예를 들어, 이 감지는 부울을 반환합니다. 배열이면 true를 반환하고, 그렇지 않으면 다음과 같이 배열인지 감지하는 코드를 살펴보겠습니다. >
console.log([] instanceof Array); // true console.log(/\d+/g instanceof Array); // false
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
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