JS 数组

Array 对象

一. 用法

1. var a = Array(3)

// 生成长度为3的数组

            Stack                      Heap
 a         ADDR12                     12
                                       length: 2
                                        __proto__

2.var a = Array(3,3)

new Array // 加不加new 都一样

            Stack                      Heap
 a         ADDR13                    13
                                      0:3
                                      1:3
                                    length: 2
                                     __proto__

3. 基本类型与复杂类型(Object)不同

Number()=>基本类型                    Object()=>复杂类型

new Number()=>对象                    new Object()=>复杂类型

加不加new不一样                            加不加都一样

function 与Function的区别

  • function 关键字 与if var 相似
  • Function 全局对象 window.Function
  • Function('x','y','return x+y')
  • new Function('x','y','return x+y')
  • 加不加 new 结果一样

二. 函数声明方法总结

1. 具名函数 (推荐)

function f(x,y){
return x + y
}

2. 匿名函数 + var

var f
f = function(x,y){ return x+y }

3. 具名函数 + var

var f1
f1= function f2(x,y){
return x+y
}
console.log(f2) // undefined

4. window.Function + var

var f
f = new Function('x','y','return x+y')

三. JS 中数组的本质

数组:用Array 构造出来的对象
人类理解:数组就是数据的有序集合
JS理解:数组就是原型链中有 Array.prototype 的对象

JS 数组_第1张图片
image.png
  • 数组的proto指向Array.prototype
  • 数组与对象只是原型链不同

伪数组

  • 有 0,1,2,3,4,5...n,length 这些 key 的对象
  • 原型链中没有Array.prototype这一环

四. 数组的 API

  • Array.prototype.forEach
  • Array.prototype.sort
  • Array.prototype.join
  • Array.prototype.concat
  • Array.prototype.toString
  • Array.prototype.map
  • Array.prototype.filter
  • Array.prototype.reduce

1. forEach

forEach的用法与map方法一致,参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。

用法

源代码

function log(element, index, array) {
  console.log('[' + index + '] = ' + element);
}

[2, 5, 9].forEach(log);
// [0] = 2
// [1] = 5
// [2] = 9
function forEach(array,x){
    for(let i=0;i< array.length;i++){
        x( array[i] , i )
    }
}
 var a = [1,2,3,4]
a.forEach(function( x, y ){
      console.log(x,y)
})

下面是老师的过程 forEach

JS 数组_第2张图片
forEach1.png
JS 数组_第3张图片
forEach2.png

JS 数组_第4张图片
forEach3.png
JS 数组_第5张图片
forEach4.png
JS 数组_第6张图片
forEach5 this.png
JS 数组_第7张图片
forEach6.png

2. sort

sort方法对数组成员进行排序,默认是按照字典顺序排序。排序后,原数组将被改变。

var a=[1,4,5,2,7]
a.sort()
[10111, 1101, 111].sort(function (a, b) {
  return a - b;
})
// [111, 1101, 10111]

sort的参数函数本身接受两个参数,表示进行比较的两个数组成员。如果该函数的返回值大于0,表示第一个成员排在第二个成员后面;其他情况下,都是第一个元素排在第二个元素前面。

3. map

map方法将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。

4. filter()

filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。

filter方法的参数函数可以接受三个参数:当前成员,当前位置和整个数组。

[1, 2, 3, 4, 5].filter(function (elem, index, arr) {
  return index % 2 === 0;
});
// [1, 3, 5]

5. join()

join方法以指定参数作为分隔符,将所有数组成员连接为一个字符串返回。如果不提供参数,默认用逗号分隔。

a= [1,2,3]
a.join('饭')
// ' 1饭2饭3  '

5. concat()

concat方法用于多个数组的合并。它将新数组的成员,添加到原数组成员的后部,然后返回一个新数组,原数组不变。

var a = [1,2,3]
var b =[4,5,6]
a.concat(b)  //[1,2,3,4,5,6]

6. reduce reduceRight

reduce方法和reduceRight方法依次处理数组的每个成员,最终累计为一个值。它们的差别是,reduce是从左到右处理(从第一个成员到最后一个成员),reduceRight则是从右到左(从最后一个成员到第一个成员),其他完全一样。

[1, 2, 3, 4, 5].reduce(function (a, b) {
  console.log(a, b);
  return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后结果:15

上面代码中,reduce方法求出数组所有成员的和。第一次执行,a是数组的第一个成员1,b是数组的第二个成员2。第二次执行,a为上一轮的返回值3,b为第三个成员3。第三次执行,a为上一轮的返回值6,b为第四个成员4。第四次执行,a为上一轮返回值10,b为第五个成员5。至此所有成员遍历完成,整个方法的返回值就是最后一轮的返回值15。

JS 数组_第8张图片
reduce1.png
JS 数组_第9张图片
reduce2.png

你可能感兴趣的:(JS 数组)