前端学习笔记

标准库 Array

2019-08-01  本文已影响1人  _ClariS_
简单类型与复杂类型的区别
String、Number、Boolean、Object 另见文章:简单类型与对象(复杂类型)的区别,以下只对 Array 和 Function 进行讲解

window.Array 全局对象(也是函数)

var a = Array(3) 的内存图 Array(3) Array(3,3) Array(3)和Array(3,3)的不一致性

由结果可知 Array 加不加 new 结果都一样
Array 的更多用法见 Array MDN

window.Function 全局对象(也是函数)

由结果可知 Function 加不加 new 结果都一样

这里简单说一下 function 与 Function 的区别:

函数的声明方法

  1. 具名函数
 function f(x,y){
     return x + y
 }
  1. 匿名函数 + var
 var f
 f = function(x,y){
    return x+y 
 }
  1. 具名函数 + var
 var f1 
 f1 = function f2(x,y){
     return x+y
 }
 console.log(f2) // undefined
 console.log(f1) // ƒ f2(x,y){ return x+y }
  1. window.Function + var
 var f
 f = new Function('x','y','return x+y')

JS 中数组的本质

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

数组和对象的区别:

array.__proto__ = Array.prototype
object.__proto__ = Object.prototype

即数组和对象分别对应的原型(共用属性)不同

数组本质上是一个拥有特殊原型链的对象,数组之所以是数组,并不是因为它本身是数组,而是因为我们遍历的时候把这个对象当做数组来进行遍历(用数字下标进行遍历)

伪数组

定义:

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

这样的对象就是伪数组

目前知道的伪数组有

  1. arguments 对象(打印出函数执行时的参数)
arguments 对象
  1. document.querySelectAll('div') 返回的对象

数组的 API

  1. Array.prototype.forEach
forEach

理解:forEach 会遍历['a','b','c']这个数组,对数组中的每一项都调用 function(value,key){ console.log(value,key) } 这个函数(调用3次),并且每次在调用这个函数时会传入两个参数,分别是 value 和 key,最后打印出3组不一样的value 和 key。

问:function forEach(array,x){ }) 传了 array 和 x 两个参数,可为什么
a.forEach(function(value,key){ }) 只用传 function(value,key){ } (相当于参数 x )这一个参数就可以对 a 这个数组进行遍历呢?

答:可以将 a.forEach( function(){} ) 理解为a.forEach.call( a,function(){} ),这里数组 a 传入后实际上是用 this 进行获取的

问:for i 循环和 Array.prototype.forEach 都可以遍历数组,请问它们之间的区别是什么?

答:for 是关键字,不是函数;Array.prototype.forEach 是一个函数。
  for 循环可以 break 和 continue;Array.prototype.forEach 不支持 break 和 continue。

  1. Array.prototype.sort
sort

只有 a.sort() 会改变自身

  1. Array.prototype.join
join
  1. Array.prototype.concat
    contcat 表示合并


    concat
  2. Array.prototype.toString
    返回一个字符串,表示指定的数组及其元素

toString
  1. Array.prototype.map
    map 表示映射
map map与forEach的区别
  1. Array.prototype.filter
    filter 表示过滤
filter
  1. Array.prototype.reduce
    reduce 表示减少、压缩
reduce map、filter分别用reduce表示

其他 API 见 Array MDN

上一篇 下一篇

猜你喜欢

热点阅读