zoukankan      html  css  js  c++  java
  • JavaScript权威指南(第6版)学习笔记四

    第七章 数组

    一、创建数组

    使用数组直接量是最简单的方法:

    var empty=[];
    var primes=[1,3,5,7,11];
    var m=[1.1,"a",true];
    var b=1024;
    var table=[b,b+1,b+2];
    var bc=[[1,{x:1,y:2}],[2,{x:3}]]
    //如果直接量中省略某个值,则默认赋予undefined值
    var count=[1,,3];

    数组直接量中允许元素结尾有逗号:

    var a=[1,2,];   //两个元素分别为1和2
    var b=[true,,];  //两个元素分别为true和undefined

    另外一种方法是调用构造函数Array():

    var arra=new Array(); //无参数
    var arrb=new Array(10);  //创建一个长度为10的数组
    var a=new Array(5,3,1,"testabc");  //显式指定元素

    二、数组元素的读写

    var a=["world"];
    var value=a[0];  //读第0个元素
    a[1]=3.14;  //写第1个元素
    i=2;
    a[i]=3;  //写第2个元素
    a[i+1]="hello";   //写第3个元素
    a[a[i]]=a[0];   //读第0个和第2个元素,写第3个元素

    数组是对象的特殊形式,使用方括号访问数组元素就像用方括号访问对象的属性一样——即JavaScript把数组的数字索引转换成字符串:即索引值0变为“0”,索引值1变为“1”,然后将其作为属性名使用。这一点对于常规对象也可以这样做:

    var o={};  //创建一个普通对象
    o[1]="one";   

    虽然如上所述,但对于数组来说,其特别之处在于可以自动维护length属性值(当长度小于2^32)。所有的索引都是属性名,但只有0~(2^32-2)之间的整数的属性名才可以作为索引。所有数组都是对象

     三、稀疏数组

    稀疏数组就是包含从0开始的不连续索引的数组,因此稀疏数组的length属性值是大于元素实际的个数的。

    a=new Array(5);    //数组没有元素,但是长度为5
    a=[];        //创建一个空数组,length=0
    a[1000]=0;    //给数组a 添加元素,此时length=1001

     四、数组长度

    当设置数组length属性值为一个小于当前长度的整数值时,数组则会相应变化。

    a=[1,2,3,4,5];
    a.length=3;   //此时a变成[1,2,3]
    a.length=0;   //此时a变成[]
    a.length=5;   //此时a长度为5,但没有元素,类似于new Array(5)

    如果将length属性值设为大于当前长度的整数值,这并不会向数组中添加元素,而只是在原数组尾部创建一个空的区域。

    五、数组元素的添加和删除

    直接为新索引赋值:

    a=[];
    a[0]="zero";
    a[1]="one";

    也可以用push()方法在尾部增加一个或多个元素,这种方法在操作增加一个元素时和给数组a[a.length]赋值是一个效果:

    a=[];
    a.push("zero");
    a.push("one","two");    //此时a为["zero","one","two"]

    如果要在数组首部插入一个元素,可以使用unshift()方法,其他元素依次移动到更高索引位置上。

    a=[1,2,3];
    delete a[1];   //此时索引1处没有元素,a变成稀疏数组
    1 in a;      //false
    a.length    //依旧为3,长度不变。

    另外可以把length设置小以删除尾部的元素。数组也有pop()方法,每次使用减少长度1并返回被删除的元素值。还有一个shift()方法,从头部删除一个元素。

    六、数组遍历

    使用for循环是遍历数组最常见的方法:

    var keys=Object.keys(o);   //获得o对象属性名组成的数组
    var values=[];
    for(var i=0; i<keys.length;i++) {
      var key=keys[i];
      values[i]=o[key];
    }

    七、多维数组

    var table=new Array(10);
    for(var i=0;i<table.length;i++) 
        table[i]=new Array(10);
    for(var row=0;row<table.length;row++) {
        for(col=0;col<table[row].length;col++) {
            table[row][col]=row*col;
        }
    }

    八、数组方法

    1、join()将数组中所有元素都转换成字符串并链接在一起,返回最后生成的字符串。默认使用逗号进行分隔,也可以指定参数作为分隔符。

    var a=[1,2,3];
    a.join();   //"1,2,3"
    a.join(" ");   //"1 2 3"
    a.join("");   //"123"
    var b=new Array(10);
    b.join("-");   //"---------";9个连字号

    2、reverse()方法将数组中的元素倒序,返回逆序后的数组,替换原数组。

    var a=[1,2,3];
    a.reverse().join();    //"3,2,1",a也变成了[3,2,1]

    3、sort()方法将数组元素依据一定规则进行排序,当没有参数时,元素用字母表顺序排序。数组中的undefined元素,会被排到数组尾部。

    var a=new Array("banana","cherry","apple");
    a.sort();
    var s=a.join(", ");    //“apple, banana, cherry”

    4、slice()方法返回指定数组的一个片段或子数组。

    var a=[1,2,3,4,5];
    a.slice(0,3);   //返回[1,2,3]
    a.slice(3);   //返回[4,5]
    a.slice(1,-1);   //返回[2,3,4]
    a.slice(-3,-2);   //返回[3]

    5、splice()方法能从数组中删除元素、插入元素到数组中或同时两个操作。第一个参数指定了插入或删除的起始位置,第二个参数指定了应该从数组中删除的元素的个数,如果第二个参数省略,则从起始点到数组结尾所有元素都将被删除。splice()返回一个由删除元素组成的数组,如果没有删除元素就返回空数组。

    var a=[1,2,3,4,5,6,7,8];
    a.splice(4);    //返回[5,6,7,8],a变成[1,2,3,4]
    a.splice(1,2); //返回[2,3],a变成[1,4]
    a.splice(1,1); //返回[4],a变成[1]

    splice()前两个参数指定了需要删除的数组元素,紧随其后面的任意个参数指定了需要插入到数组中的元素,插入的位置由第一个参数指定。

    var a=[1,2,3,4,5];
    a.splice(2,0,'a','b'];  //返回[];a变成[1,2,'a','b',3,4,5]
    a.splice(2,2,[1,2],3);   //返回['a','b'];a变成[1,2,[1,2],3,3,4,5]

    6、push()/pop()方法:push()在数组尾部添加一个或多个元素,并返回数组新的长度。pop()则删除数组的最后一个元素,减少数组长度并返回被它删除的值。两个方法都修改并替换的原数组。

  • 相关阅读:
    java 编程语言基础 第一章 自我介绍
    Spring详解(四)------注解配置IOC、DI
    Spring详解(三)------DI依赖注入
    Spring详解(一)------概述
    mybatis 详解(十一)------ mybatis和spring整合
    mybatis 详解(十)------ 逆向工程
    mybatis 详解(九)------ 一级缓存、二级缓存
    mybatis 详解(八)------ 懒加载
    mybatis 详解(七)------一对一、一对多、多对多
    06-单例模式
  • 原文地址:https://www.cnblogs.com/tsembrace/p/8136092.html
Copyright © 2011-2022 走看看