javaScript 检测类型的几种方式

论坛 期权论坛 期权     
尽量更新   2019-7-14 06:00   2601   0
[h1]js类型[/h1]JavaScript包含七种基本数据类型,ES6前是undefined、null、 Boolean(布尔类型)、String(字符串类型)、Number(数值)、Object(对象)。在ES6之后增加一种Symbol,表示独一无二的值。
[h1]检测方法[/h1]
  • typeof
  1. console.log(typeof undefined) //undefined
复制代码
  1. console.log(typeof null) //object
复制代码
  1. console.log(typeof true) //boolean
复制代码
  1. console.log(typeof '123') //string
复制代码
  1. console.log(typeof 123) //number
复制代码
  1. console.log(typeof {}) //object
复制代码
  1. console.log(typeof Symbol()) //symbol
复制代码
  1. console.log(typeof []) //object
复制代码
  1. console.log(typeof function() {}) //function
复制代码
从结果上看,typeof返回结果是字符串,能够正确识别出function。null,对象,数组检测类型均为object。
  • constructor
使用方法:object.constructor
  1. console.log(undefined.constructor == undefined) //TypeError: Cannot read property 'constructor' of undefined
复制代码
  1. console.log(null.constructor == null)//TypeError: Cannot read property 'constructor' of null
复制代码
  1. console.log( true.constructor == Boolean) //true
复制代码
  1. console.log( '123'.constructor == String) //true
复制代码
  1. console.log( (123).constructor == Number) //true
复制代码
  1. console.log( {}.constructor == Object) //true
复制代码
  1. console.log( Symbol().constructor == Symbol) //true
复制代码
  1. console.log( [].constructor == Array) //true
复制代码
  1. console.log( [].constructor == Object) //false
复制代码
  1. console.log( function() {}.constructor == Function) //true
复制代码
  1. console.log( function() {}.constructor == Object) //false
复制代码
从结果上看,constructor属性返回值是Boolean类型,undefined,null没有该属性,数组和函数则返回准确的Array,Function。
  • instanceof
  1. console.log(true instanceof Boolean)//false
复制代码
  1. console.log('123' instanceof String)//false
复制代码
  1. console.log((123) instanceof Number)//false
复制代码
  1. console.log({} instanceof Object)//true
复制代码
  1. console.log(Symbol() instanceof Symbol)//false
复制代码
  1. console.log([] instanceof Array)//true
复制代码
  1. console.log([] instanceof Object)//true
复制代码
  1. console.log(function() {} instanceof Function)//true
复制代码
  1. console.log(function() {} instanceof Object)//true
复制代码
instanceof 检测的是 constructor.proptotype 是否存在于 object的原型链上。不能用来检测undefined,null。
  • Object.prototype.toString.call()
  1. console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
复制代码
  1. console.log(Object.prototype.toString.call(null))//[object Null]
复制代码
  1. console.log(Object.prototype.toString.call(true))//[object Boolean]
复制代码
  1. console.log(Object.prototype.toString.call('123'))//[object String]
复制代码
  1. console.log(Object.prototype.toString.call(123))//[object Number]
复制代码
  1. console.log(Object.prototype.toString.call({}))//[object Object]
复制代码
  1. console.log(Object.prototype.toString.call(Symbol()))//[object Symbol]
复制代码
  1. console.log(Object.prototype.toString.call([]))//[object Array]
复制代码
  1. console.log(Object.prototype.toString.call(function() {}))//[object Function]
复制代码
这个方法用的是原生的toString判断类型,可以判断准确各种类型,就是返回结果并不是很好直接用。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP