判断数据类型的方法

112 阅读1分钟

写在前面:这一篇内容总结一下判断数据类型的方法,包括typeof,constructor,instanceof,Object.prototype.toString.call希望能给你一点帮助;有问题欢迎各位提出。

判断数据类型:

1,typeof 判断基本数据类型
console.log(typeof('123'));
2,constructor 可以判断当前数据的构造函数是谁;

问题1:能够判断引用数据类型,但是这个属性其实就是对象内的一个属性,我们可以拿到这个对象,然后修改他的属性值。

问题2:不能判断undefined和null。

const arr = [1, 2, 3]
console.log(arr.__proto__.constructor)  // constructor 指向当前这个原型是那个构造函数的原型
console.log(arr.constructor)  // constructor 指向当前这个原型是那个构造函数的原型
console.log(arr.constructor === Array)  // true
console.log(arr.constructor === Function)  // false
3,instanceof 可以判断左侧的构造函数是否等于右侧的构造函数;

语法:检测数据 instanceof 构造函数;

问题:不能判断undefined 和 null;

const obj = {
    a: 1
}
obj.a = 100
console.log(obj)
​
const arr = [1, 2, 3]
const obj = {
    a: 1,
    b: 2
}
/**
*  instanceof
*      判断左边的构造函数是否等于右边的
*/
console.log(arr instanceof Array)
console.log(arr instanceof Function)
console.log(obj instanceof Array)
console.log(obj instanceof Object)
​
Array.prototype.constructor = { a: 1 }
console.log(arr instanceof Array)
​
console.log(undefined instanceof Array)
console.log(undefined instanceof Object)
console.log(undefined instanceof Function)
4,Object.prototype.toString.call(要判断的数据结构);

object这个构造函数的 原型内部有一个 toString的方法,这个方法能够帮我们将数据结构转为字符串的形式[object 数据结构],我们在使用时,如果需要判断其他数据类型,需要使用call这个方法改变内部this指向。这个方法任何数据类型都能准确判断(推荐使用)。

const arr = [1, 2, 3]
const obj = {
    a: 1,
    b: 2
}
console.log(Object.prototype.toString.call([]))
console.log(Object.prototype.toString.call(function () { }))
console.log(Object.prototype.toString.call(undefined))
console.log(Object.prototype.toString.call(null))