数据类型,我在上一篇(引用数据类型的浅拷贝和深拷贝)中已经简单了记录说明,这里,我就不过多的赘述,不然,我们领导又该说我:你的代码冗余度需要调整啊。这篇笔记,我会记录一些判断数据类型的方法,并且标注出来最推荐的,希望对大家有些许的帮助。
1,typeof方法
先上代码,这里列举了一些常见的数据类型,让我们看看typeof的判断结果都是什么:
//基本数据类型
var str = '这是字符串'
var num = 2021
var bool = false
var _null = null
var under
var symbol = Symbol('XXX')
//引用数据类型
var ary = [1,2,3]
var obj = {name:"张三"}
var fun = function () {
console.log("这是方法")
}
var date = new Date()
var reg = new RegExp()
console.log(typeof str) //string
console.log(typeof num) //number
console.log(typeof bool) //boolean
console.log(typeof _null) //object
console.log(typeof under) //undefined
console.log(typeof symbol) //symbol
console.log(typeof ary) //object
console.log(typeof obj) //object
console.log(typeof fun) //function
console.log(typeof date) //object
console.log(typeof reg) //object
结果实锤:typeof可以检测出基本数据类型的数据类型(注意:null的检测结果是‘object’,原因是因为null的定义是 ‘ null是一个只有一个值的特殊类型。表示一个空对象引用 ’),引用数据类型除了function可以检测出,其他的都是object。
所以,如果你是简单的判断数据类型,不需要得到详细的类型。这个方法还是方便的。
2,constructor方法
constructor是原型prototype的一个属性,当函数被定义时候,js引擎会为函数添加原型prototype,并且这个prototype中constructor属性指向函数引用。它是用来对比判断某个数据是不是某种类型,是就返回 ‘ true ’ ,否则返回 ‘ false ’;
上代码,看看constructor判断的结果:
//基本数据类型
var str = '这是字符串'
var num = 2021
var bool = false
var _null = null
var under
var symbol = Symbol('XXX')
//引用数据类型
var ary = [1,2,3]
var obj = {name:"张三"}
var fun = function () {
console.log("这是方法")
}
var date = new Date()
var reg = new RegExp()
console.log(str.constructor == String) //true
console.log(num.constructor == Number) //true
console.log(bool.constructor == Boolean) //true
console.log(_null.constructor == Null) //报错
console.log(under.constructor == Underfined) //报错
console.log(symbol.constructor == Symbol) //true
console.log(ary.constructor == Array) //true
console.log(obj.constructor == Object) //true
console.log(fun.constructor == Function) //true
console.log(date.constructor == Date) //true
console.log(reg.constructor == RegExp) //true
结果实锤:null 和 underfined 没有constructor属性,不能用这个方法判断,但是其他的数据类型都可以判断出来。
所以,没有特殊情况的时候,这个方法比较推荐;
3,instanceof方法
instanceof和constructor一样,也是对比判断。不过,instanceof判断某个数据是不是某个类型的一个实例,是返回 ‘ true ’ ,否则返回 ‘ false ’。
语法: object instanceof constructor
; object
要检测的对象。constructor
某个构造函数。
上代码,看instanceof的判断结果:
//基本数据类型
var str = '这是字符串'
var num = 2021
var bool = false
var _null = null
var under
var symbol = Symbol('XXX')
//引用数据类型
var ary = [1,2,3]
var obj = {name:"张三"}
var fun = function () {
console.log("这是方法")
}
var date = new Date()
var reg = new RegExp()
console.log(str instanceof String) //false
console.log(num instanceof Number) //false
console.log(bool instanceof Boolean) //false
console.log(_null instanceof Null) //报错
console.log(under instanceof Underfined) //报错
console.log(symbol instanceof Symbol) //false
console.log(ary instanceof Array) //true
console.log(obj instanceof Object) //true
console.log(fun instanceof Function) //true
console.log(date instanceof Date) //true
console.log(reg instanceof RegExp) //true
结果实锤:instanceof不能用来判断null 和 underfined。原因和constructor一样。同事instanceof不判断不出来基本数据类型。但是判断引用数据类型还是可以的。
4,Object.prototype.toString.call()方法
//基本数据类型
var str = '这是字符串'
var num = 2021
var bool = false
var _null = null
var under
var symbol = Symbol('XXX')
//引用数据类型
var ary = [1,2,3]
var obj = {name:"张三"}
var fun = function () {
console.log("这是方法")
}
var date = new Date()
var reg = new RegExp()
console.log(Object.prototype.toString.call(str) ) //[object String]
console.log(Object.prototype.toString.call(num) ) //[object Number]
console.log(Object.prototype.toString.call(bool) ) //[object Boolean]
console.log(Object.prototype.toString.call(_null) ) //[object Null]
console.log(Object.prototype.toString.call(under) ) //[object Undefined]
console.log(Object.prototype.toString.call(symbol) ) //[object Symbol]
console.log(Object.prototype.toString.call(ary) ) //[object Array]
console.log(Object.prototype.toString.call(obj) ) //[object Object]
console.log(Object.prototype.toString.call(fun) ) //[object Function]
console.log(Object.prototype.toString.call(date) ) //[object Date]
console.log(Object.prototype.toString.call(reg) ) //[object RegExp]
结果实锤:Object.prototype.toString.call()方法可以非常直观和准确的判断出所有数据的数据类型。使用这个方法返回的是 字符串 ,我们只要做一些简单的字符串处理,或者直接判断就可以了。所以非常推荐使用此方法。
打完!收工!以上便是判断数据类型的常用方法和 ‘栗子’。有需要的朋友可以借鉴一下,希望对大家有所帮助。
拜了个拜!迪迦。。。