美文网首页
2021-04-14

2021-04-14

作者: 小王子__ | 来源:发表于2021-04-14 15:01 被阅读0次

js判断数组的3个方法

1,Object.prototype.toString.call()

能准确的判断所有的数据类型类型

每一个继承Object的对象都有一个toString方法,如果toString方法没有被重写的话,会返回[Object type],其中type为对象的类型。

const arr = ["Hello", "World"]
arr.toString() // => "Hello,World"
Object.prototype.toString.call(arr) // => "[Object Array]"

除Object类型的对象外,其他类型直接使用toString()方法,会直接返回字符串。所以需要使用call或者apply方法来改变toString方法的执行上下文。

Object.prototype.toString.call('string')
Object.prototype.toString.call(1)
Object.prototype.toString.call(false)
Object.prototype.toString.call(Symbol(1))
Object.prototype.toString.call(function () {})
Object.prototype.toString.call({name: 'Jerry'})
Object.prototype.toString.call([1, 2, 3, 4])
Object.prototype.toString.call(null)
Object.prototype.toString.call(undefined)
image
2,instanceof

能检测array、function、object类型

instanceof用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上。简单说就是instanceof是用来判断 A 是否为 B 的实例,表达式:A(object) instanceof B(constructor)

1 instanceof Number
'str' instanceof String
true instanceof Boolean
[1,2,3] instanceof Array
function () {} instanceof Function
{} instanceof Object
image

instanceof 的缺点:
是否处于原型链上的判断方法不严谨

instanceof 方法判断的是是否处于原型链上,而不是是不是处于原型链最后一位,所以会出现以下情况:

var arr = [1, 2, 3]
arr instanceof Array  // true
arr instanceof Object  // true

function fn() {}
fn instanceof Function  // true
fn instanceof Object   // true

因为所有原型链的尽头都是Object

3, Array.isArray()

用于判断对象是否为数组

Array.isArray()是ES5推出的,不支持ES6~8,使用时应考虑兼容

if (typeof Array.isArray !== "function") {
  Array.isArray = function (obj) {
    return Object.prototype.toString.call(obj) == "[Object Array]"
  }
}

相关文章

网友评论

      本文标题:2021-04-14

      本文链接:https://www.haomeiwen.com/subject/rfaklltx.html