js一共有六大数据类型:number、string、object、Boolean、null、undefined。
1、typeof( )
const a=[]
console.log(typeof(a))
const b={}
console.log(typeof(b))
const c='好好学习!'
console.log(typeof(c))
const d=false
console.log(typeof(d))
⚠️ null、对象、数组返回的都是object类型;对于函数类型返回的则是function。
⚠️ 数组是属于Object类型的,也就是引用类型,所以不能使用typeof判断其具体类型!
2、isArray( )
Array.isArray(obj) //obj--需要检测的数据
返回值:
如果值是 Array,则为true; 否则为false。
3.instanceof
object instanceof constructor
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
例如:
const a = [];
const b = {};
console.log(a instanceof Array); true
console.log(a instanceof Object); true
console.log(b instanceof Array); false
4.constructor
console.log([].constructor == Array); //true
console.log({}.constructor == Object); //true
console.log("string".constructor == String); //true
console.log((123).constructor == Number); //true
console.log(true.constructor == Boolean); //true
⚠️constructor属性被修改之后,就无法用这个方法判断数组是数组了,除非你能保证不会发生constructor属性被改写的情况,否则用这种方法来判断数组也是不靠谱的!
const a = [];
a.contrtuctor = Object;
console.log(a.constructor == Array); true
console.log(a.constructor == Object); false
console.log(a instanceof Array); true
5、Object.prototype.toString.call(arr)
把对象转为字符串和一个已知的对象进行对比
使用Object.prototype.toString.call(arr) === '[object Array]'方法
function isArray(o) {
return Object.prototype.toString.call(o);
}
var arr=[2,5,6,8];
var obj={name:'zhangsan',age:25};
var fn = function () {}
console.log(isArray(arr)); //[object Array]
console.log(isArray(obj)); //[object Object]
console.log(isArray(fn)); //[object Function]
6、Object.getPrototypeOf()
返回指定对象的原型,然后和Array的原型对比
let arr = []
console.log(Array.prototype.isPrototypeof(arr)) //true