typeOf 判断基本数据类型
返回一个字符串,表示操作数的类型。
console.log(typeof 123) //number
console.log(typeof '123') //string
console.log(typeof false) // boolean
console.log(typeof Symbol()) //symbol
console.log(typeof undefined) //undefined
console.log(typeof null) //object
console.log(typeof []) //object
console.log(typeof {}) //object
console.log(typeof function(){}) //function
从上面例子可以看出,typeof可以精准的判断基本数据类型(null)除外。
instanceOf 判断引用数据类型
返回布尔值
instance的意思是实例,因此可以知道instanceof的作用就是判断该对象是谁的实例,我们也就知道了instanceof是对象运算符。
这就牵扯到了对象的继承,它的判断就是根据原型链进行搜寻,在对象obj1的原型链上如果存在另一个对象obj2的原型属性,那么表达式(obj1 instanceof obj2)返回值为true,否则为false。
可以简单认为:顺着原型链去找,直到找到相同的原型对象,返回true,否则为false。
Object.prototype.toString.call() 判断所有类型
每个对象都有一个 toString() 方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString() 方法被每个 Object 对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 [object type],其中 type 是对象的类型。
const objectToString = Object.protoType.toString;
const getType = (value)=> {
return objectToString.call(value).slice(8, -1)
//return objectToString.call(value).replace(/^[object (.*?)]/, '')
}