zoukankan      html  css  js  c++  java
  • Js学习(3) 数组

    数组本质:

    本质上数组是特殊的对象,因此,数组中可以放入任何类型的数据,对象,数组,函数都行

    它的特殊性在于键名是按次序排列好的整数 从0开始,是固定的,不用指定键名

    如果数组中的元素仍是数组,则为多维数组

    数组可以先定义后赋值,也可以声明时即赋值

    var arr = [];
    
    arr[0] = 'a';
    arr[1] = 'b';
    arr[2] = 'c';
    
    var arr = [
      {a: 1},
      [1, 2, 3],
      function() {return true;}
    ];
    
    arr[0] // Object {a: 1}
    arr[1] // [1, 2, 3]
    arr[2] // function (){return true;}
    

    length属性 

    返回数组的成员数量,可通过调整length控制数组的大小

    Js中的数组是动态的可随时增删,length总是键名中的最大整数加1

    由于数组本质上是一种对象,所以可以为数组添加属性,但不影响length的值

    var a = [];
    
    a['p'] = 'abc';
    a.length // 0
    
    a[2.1] = 'abc';
    a.length // 0
    

    如果数组的键名数值超出范围,该键名会自动转换为字符串

    数组的遍历

    可以用for...in

    不过会遍历到非整数键名

    因此用for,while或forEach

    数组的空位

    当数组的某个位置是空元素,即两个逗号之间没有任何值,称数组存在空位,空位不影响length属性

    数组的空位是可以读取的,返回undefined

    使用delete命令删除一个数组成员,会形成空位,且不会影响length属性

    var a = [1, 2, 3];
    delete a[1];
    
    a[1] // undefined
    a.length // 3
    

    然而空位与一开始定义为undefined是不一样的

    使用数组的forEach,for...in,Object.keys方法进行遍历,空位会被跳过,undefined不会  

    类似数组的对象

    如果一个对象的所有键名都是正整数或零,并且有length属性,那么语法上称“类似数组的对象”

    array like object

    根本特征在于有length属性,但不是动态的

    典型的类似数组的对象是函数的arguments对象,以及大多数DOM元素集,还有字符串

    // arguments对象
    function args() { return arguments }
    var arrayLike = args('a', 'b');
    
    arrayLike[0] // 'a'
    arrayLike.length // 2
    arrayLike instanceof Array // false
    
    // DOM元素集
    var elts = document.getElementsByTagName('h3');
    elts.length // 3
    elts instanceof Array // false
    
    // 字符串
    'abc'[1] // 'b'
    'abc'.length // 3
    'abc' instanceof Array // false

    可以通过某些方法把类似数组的对象变成真正的数组

    1.数组的slice方法

    var arr = Array.prototype.slice.call(arrayLike);
    

    2.通过call()把数组的方法放到对象上面 

  • 相关阅读:
    c++虚函数表 Brew VTBL
    c++ 类数据成员的定义、声明
    变量声明和定义的区别
    C++ 对象间的赋值与拷贝构造函数
    Android应用程序构成
    android平台的技术架构
    认识Service
    Application的作用
    Context的作用
    如何切换到自定义的Activity
  • 原文地址:https://www.cnblogs.com/wtblogwt/p/10016390.html
Copyright © 2011-2022 走看看