判断类型typeof、instanceof、Object.prototype.toString.call()

70 阅读1分钟

JS基本数据类型:null、undefined、number、boolean、symbol。 string比较特殊,定义是引用类型的,但其操作是值类型。 引用数据类型:function、object、array。

typeof 可以用来判断基本类型。

console.log(typeof 1) //number
console.log(typeof NaN) //number
console.log(typeof 'name') //string
console.log(typeof {}) //object
console.log(typeof []) //object
console.log(typeof null) //object
console.log(typeof function () {}) //function
console.log(typeof undefined) //undefined
console.log(typeof true) //boolean
console.log(typeof Symbol('88')) //symbol

注意:instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

console.log([] instanceof Array) //true
console.log({} instanceof Object) //true
console.log(new Date() instanceof Date) //true

function Person(){}
console.log(new Person() instanceof Person) //true

console.log([] instanceof Object) //true
console.log(new Date() instanceof Object) //true
console.log(new Person instanceof Object) //true

Object.prototype.toString.call()这种方法对于所有基本的数据类型都能进行判断,即使是 null 和 undefined 。

console.log(Object.prototype.toString.call('An')) //[object String]
console.log(Object.prototype.toString.call(1)) // [object Number]
console.log(Object.prototype.toString.call(Symbol(1))) // [object Symbol]
console.log(Object.prototype.toString.call(null)) // [object Null]
console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
console.log(Object.prototype.toString.call(function () {})) // [object Function]
console.log(Object.prototype.toString.call({ name: 'An' })) // [object Object]
console.log(Object.prototype.toString.call([1])) // [object Array]
console.log(Object.prototype.toString.call(new Date())) // [object Date]