美文网首页
js数组--到底什么是数组 & a.forEach

js数组--到底什么是数组 & a.forEach

作者: CeaCrab | 来源:发表于2018-03-21 13:48 被阅读0次

    Array --数组

    js中什么是数组?
    i. 用array构造出来的对象就是数组。
    ii.它与Object的区别是:array是用array构造出来的对象,它的共有属性是是由array构造的,它的共有属性也是一个简单的对象,它也有下划线proto,并且指向Object根;Object是用Object构造出来的对象,他的下划线proto直接指向Object根,他们都是对象,不同的是原型链不一样。

    数组a和obj都是一个对象,不同之处是他们的共有属性不同,数组之所以是数组,因为他有数组的特点

    数组之所以是数组我们把它当数组,下图中,同一个数组,不同是遍历方式就出现了不一样的结果,for循环遍历,是i++,所以xxx,yyy遍历不到。对象遍历结果就出来了。所以说数值之所以是数组是我们把它当数组来遍历了。


    数组方式遍历
    对象方式遍历
    1. Arrar数组是一种特殊的对象,当我们声明一个数组的时候 a=[1,2,3]; 其实就是声明了一个对象,这个对象的length:3,keys = ['0':1,'1':2,'2':3]
    2. 如果声明一个数组只有length,keys,为什么我们可以a.fush?这是因为它也有自己的共有属性,下划线proto指向这个共有属性,共有属性有push。这就是js强大之处,因为共有属性的存在,它可以用很小的体积获取更多的功能。


      深度截图_选择区域_20180311171923.png
      深度截图_选择区域_20180311172918.png
      深度截图_选择区域_20180311194939.png
      深度截图_选择区域_20180311195017.png
      深度截图_选择区域_20180311195131.png
      深度截图_选择区域_20180311195326.png
    • 伪数组
      你的原型链(proto)中,没有Array prootype(数组共有属性)
      现在所接触到的伪数组,arguments,下边proto直接指向Object根protoType。
    //用法,dir打印可以打印出层级结构
    > function f () {
           console.dir(arguments)
    }
    > f(1,2,3)
    // Arguments(3)
    _proto_
    
    深度截图_选择区域_20180311203017.png
    • 数组常用的API
    //诠释下边代码
    function forEach(array,x){ //forEach接收了一个数组array和一个函数x
      for(let i = ; i < array.length; i++){ //遍历数组array
        x(array[i},i) //执行函数x,并接收两个参数,一个是数组的value,一个是数组的key
      }
    }
    forEach(['a','b','c'],function(value,key){ //forEach传入一个数组,一个函数,函数的参数一个是数组的value,一个是数组的key
          console.log(value,key) //打印出value和key
        }
    // a 0 
    // b 1 
    // c 2 
    **********************************************************************************************
    var a = ['a','b','c'];
    a.forEach(function(x,y){ //a.forEach,遍历数组a,接收调用这个函数,函数的参数x对应遍历数组结果的value,参数y对应遍历数组结果的key
        console,log(value,key)
    }
    
    深度截图_选择区域_20180321152151.png
    1. y()和y.call()表示执行(调用)这个函数


      y()和y.call()表示执行(调用)这个函数
      接收并执行这个函数,同时传参数给另一个函数

      声明一个函数,forEach一个数组和一个函数x,遍历这个数组,执行函数的同时同时传两个参数,一个是数组的value,一个是key。forEach定义这个数字的value,执行函数x,打印出函数的value和key(同时传的两个参数),因为数组有3个value,遍历a的时候调用下x,两个值是 (a,0),遍历到b的时候再调用x…


      深度截图_选择区域_20180312004509.png
    • a.forEach(function(){}),a.forEach接收了两个参数,一个是隐藏的a,一个函数,函数必须接收2-3个参数,第一个一定是value,第二个一定是key,下边的是a本身
      下边图中高亮代码中a.forEach是在遍历数组a,这个函数并没有传入参数,这个函数怎么拿到的数组a呢?因为其实传了两个参数,其中隐含的就是this这个参数。a.forEach我们可以理解其实是传了两个参数,a.forEach(function(){}) === a.forEach.call(a,function(){})点之前的都会被传入,点前的数组a就是这样被传入的,并且是用this获取的。我们可以自己造一个forEach,this是指Obj。总结来说a.faEach可以通过this把数组a传入。下边图示:
      a.forEach
      深度截图_选择区域_20180312114815.png
      我们调用这个函数,forEach一个函数就是x,x参数必须是value和key,x(this[i],i)已经确定是一个value和一个key了
      深度截图_选择区域_20180312115203.png
    a=['aaa','bbb','ccc']; //声明一个数组
    a.forEach(function(x,y){  //faEach一个函数,必须有两个或三个值,a.forEach(遍历传入了a数组),x一定是value,y一定是key
      console.log(x.y) //打印出value key
    })
    // aaa 0
    // bbb 1
    // ccc 2
    

    相关文章

      网友评论

          本文标题:js数组--到底什么是数组 & a.forEach

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