总结:全面的监测数据类型的方法

需要检测是不是 number string boolean undefined function

使用typeOf 检测 是有局限性的 比如 数组、对象等引用类型检测出来都是Object

console.log(typeOf 123) // Number
console.log(typeOf '123') // String 
console.log(typeOf NaN) // Number
console.log(typeOf true) // Boolean
console.log(typeOf undefined) // Undefined
console.log(typeOf function(){}) // Function

console.log(typeOf null) // Object
console.log(typeOf {}) // Object
console.log(typeOf []) // Object

使用 instanceof 检测 某个对象是否属于某个类的实例 但是检测 数组、对象、函数 等引用类型检测出来也是Object

console.log({}.instanceof Object) // true
console.log([].instanceof Array) // true
console.log(123.instanceof Number) // 报错

使用 construct 检测 可以根据原型对象检测

console.log({}.construct === Object) // true
console.log([].construct === Array) // true
console.log(123.construct === Number) // 报错

目前准确的检:Object.prototype.toString.call()

console.log(Object.prototype.toString.call(123)) // [object Number]
console.log(Object.prototype.toString.call('ok')) // [object String]
console.log(Object.prototype.toString.call(true)) // [object Boolean]
console.log(Object.prototype.toString.call([]) // [object Array]
console.log(Object.prototype.toString.call({}) // [object Object]
console.log(Object.prototype.toString.call(function(){}) // [object Function]
console.log(Object.prototype.toString.call(/abc/) // [object RegExp]
console.log(Object.prototype.toString.call(null) // [object Null]
console.log(Object.prototype.toString.call(undefined) // [object Undefined]
let d= new Date()
console.log(Object.prototype.toString.call(d) // [object Date]
let s = Symbol
console.log(Object.prototype.toString.call(s) // [object Symbol]

instanceof 不足:

  • 可以检测出引用类型,但是检测不出基本类型
  • 所有应用类型,都是Object的实例
  • 可以人为修改原型链,导致检测的结果不准缺

typeOf不足:

  • 可以检测出基本类型,但是检测不出引用类型,检测出来都是Object

construct不足:

  • 可以检测出引用类型,但是检测不出基本类型
  • 可以人为修改原型链,导致检测的结果不准缺

你可能感兴趣的:(javascript)