1.typeof
typeof的返回值一般有以下几种:undefined 、boolean 、 string、 number、object、 function
可以判断简单数据数据类型(undefined、null、boolean、number 、string ),但是对于复杂数据类型就判断不出来了
举个栗子:
console.log(typeof(true)); //'boolean'
console.log(typeof '123'); //'string'
console.log(typeof 123); //'number'
console.log(typeof NaN); //'number'
console.log(typeof null); //'object'
console.log(typeof [1,2,3,4]); //'object'
注意:这两个是比较特殊的
console.log(typeof NaN); //'number'
console.log(typeof null); //'object'
2.instanceof 方法
instanceof
用于判断一个变量是否属于某个对象的实例。
var arr = [1, 2, 3]
console.log(arr instanceof Array) //true
console.log({} instanceof Object);//true
console.log(function(){} instanceof Function);//true
3.利用对象的constructor
属性
constructor
属性返回所有 JavaScript 变量的构造函数。是一种用于创建和初始化 class 创建的对象的特殊方法。
var arr = [1, 2, 3]
console.log(arr.constructor === Array) //true
console.log((function () { }).constructor === Function);//true
console.log(({}).constructor === Object);//true
注意:constructor 是会被改变的。所以不推荐这样判断
let c = [];
c.constructor = Object;
console.log(c.constructor === Array); // false
4.使用Object.prototype.toString.call()方法
每一个继承 Object
的对象都有toString
方法,如果toString
方法没有重写的话,会返回 [Object type]
,其中type
为对象的类型。
但当变量类型不为对象时,使用 toString 方法会直接返回数据内容的字符串,所以我们需要使用call或者apply方法来改变toString方法的执行上下文。
var arr = [1, 2, 3]
console.log(Object.prototype.toString.call(arr)) //"[object Array]"
console.log(Object.prototype.toString.call({})) //"[object Object]"
5.Array.isArray()
只可以判断数组类型
var arr = [1, 2, 3]
console.log(Array.isArray(arr)) //[object Array]