判断数据类型的方法

99 阅读1分钟

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 (.*?)]/, '')
}