首页 > 编程语言 > 详细

JavaScript数据类型

时间:2020-02-21 12:41:33      阅读:53      评论:0      收藏:0      [点我收藏+]
  • undefined
  • boolean
  • string
  • number
  • object
  • function
constructor 判断对象的类型:

[].constructor===Array
/123/.constructor===RegExp
(10).constructor === Number

但自定义的类型就不可以用这个了

function Person(name) {
this.name = name
}
var person = new Person();

person.constructor=== Person

instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型

[] instanceof Array => true
[] instanceof Object => true
[] instanceof Date => false

Object.prototype.toString() 返回对象的字符串表示

因为 toString 返回的总是[object,class] 形式,object 通用类型,class 表示内部类型,所以可以使用Object.prototype.toString的方法

怎么使用呢?

因为 Array,Boolean,Number等都是Object的实例,如:Array instanceof Object 结果为true ,可以验证Array,Boolean等都复写了toString的原型方法,在调用[].toString() 实际调用的是 Array.prototype.toString()并不是Object.prototype.toString()

如: 先 delete Array.prototype.toString,再调用[].toString() 调用的才是 Object.prototype.toString()方法

delete Array.prototype.toString
console.log([].toString());

看到这大家应该明白了:改变toString的内部指针,也就是说函数的所有者(可以看之前的文章)
这不就是apply和call了吗
所以: 可以这样写Object.prototype.toString.call(obj) 当然apply也是可以的
我们就可以封装下面的函数用于类型判断

function typeOf(obj) {
var typeList = {
‘[object Boolean]‘ : ‘boolean‘,
‘[object Number]‘ : ‘number‘,
‘[object String]‘ : ‘string‘,
‘[object Function]‘ : ‘function‘,
‘[object Array]‘ : ‘array‘,
‘[object Date]‘ : ‘date‘,
‘[object RegExp]‘ : ‘regExp‘,
‘[object Undefined]‘: ‘undefined‘,
‘[object Null]‘ : ‘null‘,
‘[object Object]‘ : ‘object‘
};
return typeList [Object.prototype.toString.call(obj)];
}
技术分享图片

更多技术资讯可关注:itheimaGZ获取

JavaScript数据类型

原文:https://www.cnblogs.com/zhuxiaopijingjing/p/12340468.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!