ForeveHG / Frontend-Daily-Interview

学习,尝试回答一些前端面试题
1 stars 0 forks source link

82. 有以下 3 个判断数组的方法,请分别介绍它们之间的区别和优劣 #83

Open ForeveHG opened 3 years ago

ForeveHG commented 3 years ago

Object.prototype.toString.call() 、 instanceof 以及 Array.isArray()

ForeveHG commented 3 years ago
  1. Object.prototype.toString.call方法会返回一个"[object xxx]"的字符串,如果参数为null或undefined会直接返回"[object null]"或“[object undefined]”,其他参数会转为对象,参数为基本类型时就是“封箱”,然后返回对象内部的[[class]]属性,新标准中是返回[Symbol.toStringTag]属性,所以Object.prototype.toString.call可以很好的判断基本类型和内置对象的类型,对于自定义类型,可以在自定义[Symbol.toStringTag]属性后进行判断,比如

    class People {}
    Object.prototype.toString.call(People) //[object Function]
    People[Symbol.toStringTag] = 'People'  //自定义[Symbol.toStringTag]属性
    Object.prototype.toString.call(People) //[object People]
  2. instanceof是通过判断A对象的原型链上是否包含B对象来确定A对象是否是B类型的,返回值是true或者false,它可以判断基本类型,内置类型,自定义类型

  3. Array.isArray只用来判断对象是否为数组