联易融前端面试:判断数据类型

在js中如何判断数据类型?断的结果都是什么?有多少种判断方式?
1、typeof

1、返回类型包含7中:number、booblean、string、symbol、object、function、undefined
2、typeof null 为object
3、引用数据类型除了function类型外,其他均返回object。
4、其中,null有属于自己的数据类型Null,引用数据类型中的数组、日期、正则也都有自己的数据类型,而typeof对于这些类型的处理,只返回了处于其原型链最顶端的Object。

2、toString:方法

toString()是object的原型方法,调用该方法,默认返回当前对象的[[calss]],这是一个内部属性,其格式为[Object Xxx]([object string]),其中xxx就是数据类型。对于object对象,直接调用toString()就能返回[object object]。而对于其他对象,则需要通过call/apply来调用才能返回正确的数据类型。比如:


Object.prototype.toString.call('')//[object string]
Object.prototype.toString.call(1) // [obejct number]
Object.prototype.toString.call(true) //[object boolean]
Object.prototype.toString.call(Symbol) // [object symbol]
Object.prototype.toString.call(undefined) // [object undefined]
Object.prototype.toString.call(null) // [obejct unll]
Object.prototype.toString.call(new Function()) //[object Function]
Object.prototype.toString.call(new Date()) // [object Date]
Object.prototype.toString.call([]) // [object Array]
Object.prototype.toString.call(new RegExp()) // [object RegExp]
Object.prototype.toString.call(new Error()) // [object Error]
Object.prototype.toString.call(document) // [obejct HTMLDocument]
Object.prototype.toString.call(window) // [object global] window是全局对象global的引用。

3、construct

construct是原型prototype的一个属性,当函数被定义的时候,js引擎会为函数添加原型prototype,并且这个prototype中construct属性指向函数引用,因此重写prototype会丢失原来的constructor。
不过这种方法也有自己的问题:
1:null和undefined没有construct,这种方法判断不了。
2:还有,如果定义对象,开发者重写prototype之后,原有的construct会丢失,因此,为了规范开发,在重写对象原型时一般都需要重新给constructor赋值,以保证对象实例的类型不被篡改。

''.constructor == string //true
new Number(1).constructor == Number //true
document.constructor == HTMLDocument // true
window.constructor == window
4、instanceof

instanceof是用来判断A是否为B的实例,表达式为:A instacneof B,如果A是B的实例,则返回true,否则返回false。这这里需要别注意的是:instanceof检测的是原型。
在这里插入图片描述
从图中可以看出[]的原型指向Array.prototype,间接指向Object.prototype,因此[] instanceof Array 返回ture , [] instanceof Object 返回的也是true
instanceof 只能用来判断连个对象是否为实例关系,而不能用来判断一个对象实例具体属于那个种类类型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值