写在前面:这一篇内容总结一下判断数据类型的方法,包括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))