欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JS判断数组那点事

程序员文章站 2022-06-24 17:22:26
面试题中有个这样题目 如何判断数组 大家都知道哪些方法 其实有时候 明明知道哪些方法 但在关键时候就是说不上来 typeof运算符 typeof会返回这个类型的字符串...

面试题中有个这样题目 如何判断数组 大家都知道哪些方法

其实有时候 明明知道哪些方法 但在关键时候就是说不上来

typeof运算符

typeof会返回这个类型的字符串

 var a = '123'
 console.log(typeof(a)) //string
 var b = []
 console.log(typeof(b)) //object
 var c = {}
 console.log(typeof(c)) //object
 var d = null
 console.log(typeof(d)) //object

上述看到 数组 对象 null 用typeof返回都是object 这种方法不能识别出是否为数组

原型contructor链方法

实例化有一个contructor属性 这个属性指向生成对象 数组的方法

 var a = []
 console.log(a.__proto__.constructor) //ƒ array() { [native code] }
 var b = {}
 console.log(b.__proto__.constructor) //ƒ object() { [native code] }

上述看到 数组是由array函数实例化的 对象由object函数实例化来得

感觉这种方法是可以了 但是 constructor这个属性是可以被改写的

  var a = []
  a.__proto__.constructor = object
  console.log(a.__proto__.constructor) //ƒ object() { [native code] }

可以看到 这个是 变成了数组判断成了对象 所以这个方法也不是最好的

instanceof

这个方法是判断某个构造函数的prototype属性所指向的对象是否在另外一个要检测对象的原型链上

  var a = []
  console.log(a instanceof array) //a对象的原型链上能找到array true
  console.log(a instanceof object) //true 原型链上也能找到对象

上述这种也不是特别好 判断不出是数组还是对象

通用的方法 tostring

tostring() 方法返回放映这个对象的字符串

  var a= '123'
  console.log(a.tostring()) //123
  var b = [1,2,3]
  console.log(b.tosting()) //1,2,3
  var c = {}
  console.log(c.tostring)) //[object object]

可以看到只有对象返回对象类型

返回[object type] type代表对象的类型

判断对象用object的tostring的方法拿过来用

 var a =[]
 object.prototype.tostring.call(a) //[object array]

这个对象 tostring方法是可以判断出是否为数组

但是这里注意下有个情况就是对象原型上tostring() 也是可以更改的

array.isarray(xx)

个人感觉还是使用通用方法 tostring() 方法靠谱

总结

以上所述是小编给大家介绍的js判断数组那点事,希望对大家有所帮助