1. 伪数组的特点:

  1. * Object对象
  2. * length属性
  3. * 数值下标属性
  4. * 没有数组特别的方法: forEach(), push(), pop(), splice()
  1. // 自定义一个伪数组
  2. <script>
  3. <script>
  4. var weiArr = {}
  5. weiArr.length = 0
  6. weiArr[0] = "zjw"
  7. weiArr.length = 1
  8. weiArr[1] = "after"
  9. weiArr.length = 2
  10. for (var i = 0; i < weiArr.length; i++) {
  11. var obj = weiArr[i]
  12. console.log(i, obj)
  13. }
  14. //伪数组是一个 Object,而真实的数组是一个 Array
  15. console.log(weiArr instanceof Array ) //false
  16. console.log(weiArr instanceof Object ) //true
  17. console.log(weiArr.forEach,weiArr.push) //undefined undefined
  18. </script>
  19. </script>

2.判断一个对象是否属于“伪数组”

2.1用Array.isArray

  1. Array.isArray(weiArray) === false;
  2. Array.isArray(arr) === true;

2.2用instanof

  1. console.log(weiArrayinstanceof Array)//false
  2. console.log(arr instanceof Array)//true

3.常见的伪数组

1.jQuery 对象(比如 $(“div”) )
2.函数内部的 arguments
3.DOM 对象列表(比如通过 document.getElementsByTags ,document.childNodes返回的NodeList对象)

4.伪数组存在的意义

伪数组存在的意义,是可以让普通的对象也能正常使用数组的很多方法(push和forEach等)

  1. <script>
  2. function fun(x,y){
  3. // arguments.push(3) Uncaught TypeError: arguments.push is not a function
  4. Array.prototype.push.call(arguments,3)
  5. console.log(arguments)
  6. }
  7. fun(1,2)
  8. </script>

js中伪数组(也叫类数组) - 图1

5.将伪数组转换为数组

可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象

  1. <script>
  2. function fun(x,y){
  3. const newarguments= Array.prototype.slice.call(arguments)
  4. console.log(newarguments)
  5. console.log(newarguments instanceof Array)//true
  6. console.log(Array.isArray(newarguments))//true
  7. }
  8. fun(1,2)
  9. </script>

js中伪数组(也叫类数组) - 图2