前端面试纪实(四):如何判断一个变量是数组:typeof和instanceof

1 typeof


我的第一反应是`typeof`。但是正中对方下怀。

typeof []
‘object’


这样返回的是`object`

这是一个JS很怪异的地方。

为什么很怪异的呢,因为小白往往以{}和[]区分Array和Object


但是如果你看JS的`Object`官方文档,typeof这样的行为或许有点道理

```\
All objects in JavaScript are descended from Object; all objects inherit methods and properties from Object.prototype
一切对象都继承了Object的属性和方法。

但是typeof还是很复杂的。typeof的文档是这么描述:

这里写图片描述

对于,基本类型Undefined,Boolean,Number,String这些基本类型及其基本包装类型,typeof的行为是正常的。

值得关注的是Null:

typeof null === 'object';

文档的解释是这样的:

In the first implementation of JavaScript, JavaScript values were represented as a type tag and a value. The type tag for objects was 0. null was represented as the NULL pointer (0x00 in most platforms). Consequently, null had 0 as type tag, hence the bogus typeof return value. (reference)

大意是:null代表一个空指针,和对象有相同的type tag:0, 这造成了typeof奇怪的返回值。

typeof Symbol是ES6推出的新的数据类型,返回值是symbol

typeof函数对象的返回值是function

typeof宿主对象(依赖于JS环境的对象)的返回值的独立的,并不意味着不返回object

typeof其他对象的返回值是object,包括但不限于Array, Date, RegExp

那么应该用什么呢?

2 instanceof

第一种方法是:instanceof

> [] instanceof Array
true
这是es3的规定,但是这必须假定只有一个全局执行环境

第二种方法是:isArray

这是ES5的标准,被IE9+支持

> Array.isArray([])
true
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值