var a =[1,2,3]
console.log(typeof a)// "object"//总结: typeof运算符并不能直接判断一个变量是对象还是数组,//实际上,typeof运算符在判断基本数据类型可以,但是引用数据类型就吃力了
判断一个变量是否为数组和对象的方法
instanceof运算符
//基本用法var a =[1,2,3]
console.log(a instanceofArray);// true
console.log(a instanceofObject);// falsevar b ={name:'老王',age:18,}
console.log(a instanceofArray);// false
console.log(a instanceofObject);// true//封装方法functiongetDataType(o){if(o instanceofArray){return'Array'}elseif(o instanceofObject){return'Object'}else{return'param is not object type'}}
判断构造函数
var a =[1,2,3]
console.log(a.__proto__.constructor === Array)//true
console.log(a.__proto__.constructor === Object)//false<!--分装方法-->functiongetDataType(o){//获取构造函数var constructor = o.__proto__.constructor || o.constructorif(constructor === Array){return'Array'}elseif(constructor === Object){return'Object'}else{return'param is not object type'}}<!--缺点-->早期的ie浏览器不支持__proto__ 这个属性
toString()函数
var a =[1,2,3];var b ={name:'kingx'};console.log(Object.prototype.toString.call(a));// [object Array]
console.log(Object.prototype.toString.call(b));// [object Object]<!--其实任何类型的变量在调用toString函数时候,都会返回不同的结果-->Object.prototype.toString.call(1);// [object Number]Object.prototype.toString.call('kingx');// [object String]var c;Object.prototype.toString.call(c);// [object Undefined]// 判断变量是数组还是对象functiongetDataType(o){var result =Object.prototype.toString.call(o);if(result ==='[object Array]'){return'Array';}elseif(result ==='[object Object]'){return'Object';}else{return'param is no object type';}}