zoukankan      html  css  js  c++  java
  • javascript:数据结构-数组

    原文章:https://wangdoc.com/javascript/index.html

    数组

    定义

    数组(array)是按次序排列的一组值。每个值的位置都有编号(从0开始),整个数组用方括号表示。

    var arr = ['a', 'b', 'c'];
    

    上面代码中的abc就构成一个数组,两端的方括号是数组的标志。a是0号位置,b是1号位置,c是2号位置。

    除了在定义时赋值,数组也可以先定义后赋值。

    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;}
    

    上面数组arr的3个成员依次是对象、数组、函数。

    如果数组的元素还是数组,就形成了多维数组。

    var a = [[1, 2], [3, 4]];
    a[0][1] // 2
    a[1][1] // 4
    

    数组的本质

    本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object

    typeof [1, 2, 3] // "object"
    

    上面代码表明,typeof运算符认为数组的类型就是对象。

    数组的特殊性体现在,它的键名是按次序排列的一组整数(0,1,2...)。

    var arr = ['a', 'b', 'c'];
    
    Object.keys(arr)
    // ["0", "1", "2"]
    

    上面代码中,Object.keys方法返回数组的所有键名。可以看到数组的键名就是整数0、1、2。

    由于数组成员的键名是固定的(默认总是0、1、2...),因此数组不用为每个元素指定键名,而对象的每个成员都必须指定键名。JavaScript 语言规定,对象的键名一律为字符串,所以,数组的键名其实也是字符串。之所以可以用数值读取,是因为非字符串的键名会被转为字符串。

    var arr = ['a', 'b', 'c'];
    
    arr['0'] // 'a'
    arr[0] // 'a'
    

    上面代码分别用数值和字符串作为键名,结果都能读取数组。原因是数值键名被自动转为了字符串。

    注意,这点在赋值时也成立。一个值总是先转成字符串,再作为键名进行赋值。

    var a = [];
    
    a[1.00] = 6;
    a[1] // 6
    

    上面代码中,由于1.00转成字符串是1,所以通过数字键1可以读取值。

    上一章说过,对象有两种读取成员的方法:点结构(object.key)和方括号结构(object[key])。但是,对于数值的键名,不能使用点结构。

    var arr = [1, 2, 3];
    arr.0 // SyntaxError
    

    上面代码中,arr.0的写法不合法,因为单独的数值不能作为标识符(identifier)。所以,数组成员只能用方括号arr[0]表示(方括号是运算符,可以接受数值)。

    length 属性

    数组的length属性,返回数组的成员数量。

    ['a', 'b', 'c'].length // 3
    

    JavaScript 使用一个32位整数,保存数组的元素个数。这意味着,数组成员最多只有 4294967295 个(232 - 1)个,也就是说length属性的最大值就是 4294967295。

    只要是数组,就一定有length属性。该属性是一个动态的值,等于键名中的最大整数加上1

    var arr = ['a', 'b'];
    arr.length // 2
    
    arr[2] = 'c';
    arr.length // 3
    
    arr[9] = 'd';
    arr.length // 10
    
    arr[1000] = 'e';
    arr.length // 1001
    

    上面代码表示,数组的数字键不需要连续,length属性的值总是比最大的那个整数键大1。另外,这也表明数组是一种动态的数据结构,可以随时增减数组的成员。

    length属性是可写的。如果人为设置一个小于当前成员个数的值,该数组的成员会自动减少

  • 相关阅读:
    LeetCode 123. Best Time to Buy and Sell Stock III (stock problem)
    精帖转载(关于stock problem)
    LeetCode 122. Best Time to Buy and Sell Stock II (stock problem)
    LeetCode 121. Best Time to Buy and Sell Stock (stock problem)
    LeetCode 120. Triangle
    基于docker 搭建Elasticsearch5.6.4 分布式集群
    从零开始构建一个centos+jdk7+tomcat7的docker镜像文件
    Harbor实现容器镜像仓库的管理和运维
    docker中制作自己的JDK+tomcat镜像
    docker镜像制作---jdk7+tomcat7基础镜像
  • 原文地址:https://www.cnblogs.com/wbyixx/p/12469421.html
Copyright © 2011-2022 走看看