JavaScript数据类型

  • 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获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值