我们知道typeof可以用来查看变量的数据类型,比如:
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof NaN // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
typeof new Date() // 返回 object
typeof function () {} // 返回 function
typeof myCar // 返回 undefined (如果 myCar 没有声明)
typeof null // 返回 object
从上述例子中不难发现,数组、对象、日期的类型都是object,那么,在不知道的情况下如何确定获取到的数据到底是数组还是对象或日期呢?这里就要用到constructor属性了。
constructor用来返回所有js变量的构造函数,如:"John".constructor // 返回函数 String() { [native code] }
(3.14).constructor // 返回函数 Number() { [native code] }
false.constructor // 返回函数 Boolean() { [native code] }
[1,2,3,4].constructor // 返回函数 Array() { [native code] }
{name:'John', age:34}.constructor // 返回函数 Object() { [native code] }
new Date().constructor // 返回函数 Date() { [native code] }
function () {}.constructor // 返回函数 Function(){ [native code] }
由此,我们可以写两个方法去判断一个变量是否是数组:
function isArray(myArray){return myArray.constructor.toString().indexOf('Array') != -1;
}
同理,也可以判断一个变量是否为日期:
function isDate(myDate){
return myDate.constructor.toString().indexOf('Date') != -1;
}