ES6 判断数据类型是否为数组


1. Array.isArray()

isArray()方法是ES5新增的用于判断一个对象是否为数组;如果对象是数组返回true,否则返回false。

 Array.isArray(["Banana", "Orange", "Apple", "Mango"]) 
 // true

2. instanceof

instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。

 ["Banana", "Orange", "Apple", "Mango"] instanceof Array 
 // true

注意: instanceof 只能用来判断对象类型,不适合判断原始类型。

   1 instanceof Number 
   // false
   'teststr' instanceof String 
   //false

3. Object.prototype.toString.call()

该方法可以很好地区分各种类型,甚至是 null 和 undefined , 除了自定义对象类型(这个可用instanceof区分)。

  Object.prototype.toString.call(["Banana", "Orange", "Apple", "Mango"])
  // [object Array]

Q1: 为什么不直接用toString()
先看一下toString()的结果

 ["Banana", "Orange", "Apple", "Mango"].toString() 
 //  'Banana,Orange,Apple,Mango'

由于toString 是 Object的原型方法,类似Array、Function等具体类型作为Object的实例,已经重写了toString 方法。那么根据原型链知识:Array类型返回元素组成的字符串,如结果所示。

4. constructor

所有对象(使用 Object.create(null) 创建的对象除外)都将具有 constructor 属性。在没有显式使用构造函数的情况下,创建的对象(例如对象和数组文本)将具有 constructor 属性,这个属性指向该对象的基本对象构造函数类型。

constructor 属性返回 Object 的构造函数(用于创建实例对象)。注意,此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串。

const o = {}
o.constructor === Object // true

const o = new Object
o.constructor === Object // true

const a = []
a.constructor === Array // true

const a = new Array
a.constructor === Array // true

const n = new Number(3)
n.constructor === Number // true

["Banana", "Orange", "Apple", "Mango"].constructor==Array
// true

5. Question

5.1. typeof 是否能准确判断一个对象变量

答案:不可以
原因:
typeof 对 原始数据类型(null除外)都可以显示为正确的类型
typeof 对 对象 (函数除外),都会显示object
如:

typeof [1, 2, 4] == 'object';  // true
typeof new Date() === 'object';  // true
typeof /regex/ === 'object';  // true
typeof null === 'object';  // true
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值