zoukankan      html  css  js  c++  java
  • javascript 数组学习(一)

    今天学习了一下《javascript权威指南(第6版)》的第七章:数组

    一、数组的创建:

    数组的创建有3种方法:

    var colors = new Array(3);//可以省略new
    var colors = Array("red","blue","green");
    var colors = ["red","blue","green"];

    数组直接量可以是表达式、对象直接量、数组直接量,如果省略数组中的某项,则该项的值为undefined;

    var base = 1024;
    colors = [base,base+1,base+2,base+3];//数组直接量可以是表达式
    var arr = [[1,{x:1,y:2}],[2,{x:3,y:4}]];//数组直接量可以是对象字面量、数组字面量
    var a = [1, ,3];//a数组有3个元素,中间那个元素为undefined;
    var b =[, ,];//数组允许最后一个逗号存在,因此b数组只有2个元素(IE8以下中不允许最后一个逗号存在,因此会认为是3个元素),都是undefined;

    二、数组元素的读写:

    读写一个数组元素主要依靠索引。当然,索引有索引的规矩:

    colors[4] = "pink";//为数组colors添加一项并设置值;
    colors[5] = "navy";//为数组colors添加一项并设置值;
    colors["5"] = "yellow";//数组的索引字符串"5"将会被转换为数字5,会覆盖上一行设置的colors[5] = "navy",最后colors[5]和colors["5"]的值都为"yellow",而不是"navy";

    索引值类型既可以是字符串也可以是数字或表达式(负数和小数将会转换为字符串,假小数会转换为整数数字),索引值的类型和值将决定其创建的数组元素在数组中的排序先后,具体见下面这个例子:

    var a = [];
    a[3] = 3;
    a[1.23] = "1.23";//索引值1.23将会被转换为字符串“1.23”,即便它被转换成了字符串1.23,由于其值是数值,因此也会排在索引值为字母的元素前面;
    a[2] = "2";
    a[1] = "1";
    a[-7] = "-7";//负数索引将会被转换为字符串,从而按照先定义排前面,后定义排后面的规则来排序
    a["0"] = "0";
    a["Y"] = "Y";
    a[-5] = "-5";
    a[1000] = 1000;
    a[1.000] = "1.000";//1.000将会被转换为数字1,因此将会覆盖前面的a[1] = "1";
    a["A"] = "A";//索引为字母A的元素并不会排在先前定义的索引为字母Y的元素前面,这表明以字母为索引的元素并不会依据字母先后顺序决定排序先后,而是依据谁先定义;
    a[17] = 17;
    a[16] = "16";//索引为16的元素定义在索引为17的元素后面,但在数组中排序却在索引为17的元素前面,这证明索引为数字时,元素排序先后由数字大小决定,小在前,大在后。
    
    console.log(a);
    //输出结果为:["0", "1.000", "2", 3, 16: "16", 17: 17, 1000: 1000, 1.23: "1.23", -7: "-7", Y: "Y", -5: "-5", A: "A"]

     三、数组的长度:

    数组有个length属性记录数组的长度,但数组的长度与数组中包含的元素的数量不是一个概念(数组的length值必然会大于数组的元素个数值)。数组的长度length的具体特性如下:

    1、length的值会随着数组元素数量的增加而自动增长,但length的值并不一定等于数组元素的个数;

    var a = Array(2);
    console.log(a.length);//输出:2
    console.log(a);//输出[]
    a[3] = 3;
    a[4] = "4";
    a[5] = "5";
    a[6] = "6";
    console.log(a.length);//输出:7
    console.log(a);//输出:[3: 3, 4: "4", 5: "5", 6: "6"],由这个输出可看出虽然数组的length为7,但数组中却只有4个元素,可知数组的length并不与数组中元素个数相等

    2、减小length的数值会从数组最右边开始删除数组的元素;

    var a = [1,2,3,4,5,6,7,8,9];
    console.log(a.length);//9
    a.length = a.length-3;
    console.log(a.length);//6
    console.log(a);//[1,2,3,4,5,6]

    3、在ECMAScript5中(IE8及IE8以下不支持),可以使用Object.defineProperty(a,"length",{writable:false})来设置length为不可写的只读属性;

    //使用defineProperty方法设置数组length为只读(ES5的方法,IE8以上支持)
    a = [];
    Object.defineProperty(a,"length",{writable:false});
    a.length = 2002;
    console.log("a数组的长度为:"+a.length);//2002

    4、使用in运算符可以判断数组在某个索引处是否存在元素;

    var a = ["我","是","一","个","数","组",];
    console.log(2 in a);//返回true,表示索引2处存在元素;
    console.log(6 in a);//返回false,表示索引6处没有元素;

    四、数组元素的添加和删除:

    1、添加数组元素的方法有:push、unshift以及直接为数组的索引项赋值;

    //直接为数组索引项赋值添加数组元素;
    var b = [];
    b[0] = 0;
    b[1] = 1;
    console.log(b);//[0,1]
    
    //使用push方法从数组后面添加数组元素,会增加length值;
    b.push(2,3,4,5);
    console.log(b);//[0,1,2,3,4,5]
    console.log([b[0],b[1],b[2],b[3],b[4],b[5]]);//[0,1,2,3,4,5]
    console.log(b.length);//6
    
    //使用unshift方法从数组前面添加数组元素,会添加length值,并使原来数组项的索引值提高;
    b.unshift(-1,-2,-3,-4,-5);
    console.log(b);//[-1, -2, -3, -4, -5, 0, 1, 2, 3, 4, 5]
    console.log([b[0],b[1],b[2],b[3],b[4],b[5]]);//[-1, -2, -3, -4, -5, 0]
    console.log(b.length);//11

    2、删除数组元素的方法有:shift、pop、delete、减小数组length值;

    //使用shift从数组前面删除一个数组元素,length值减1并使后面元素索引值降低;
    b.shift();
    console.log(b);//[-2, -3, -4, -5, 0, 1, 2, 3, 4, 5]
    console.log(b.length);//10
    
    //使用pop从数组后面删除一个数组元素,length值减1;
    b.pop();
    console.log(b);//[-2, -3, -4, -5, 0, 1, 2, 3, 4]
    console.log(b.length);//9
    
    //使用delete运算符删除数组指定索引项(不只是该索引项的元素,是连索引项一起删除,使得数组变成稀疏数组),不改变length;
    delete b[0];
    console.log(b);//[1: -3, 2: -4, 3: -5, 4: 0, 5: 1, 6: 2, 7: 3, 8: 4]
    console.log(b[0]);//undefined
    console.log(b.length);//9

    3、splice是一个通用的插入、删除、替换数组元素的方法,与之前的push、unshift、shift、pop方法不同的是,它不是返回添加或删除的元素值,而是返回添加或删除元素后的新数组,它会根据需要修改length值并移动元素到更高或更低的索引处;

    五、数组的遍历:

  • 相关阅读:
    数据库字段太多,批量快速建立实体类方法(适合大量字段建立实体类)
    SQL service 中的 ”输入SQL命令窗口“ 打开了 “属性界面” 回到 ”输入SQL命令窗口“
    计算机软件编程英语词汇集锦
    编程常用英语词汇
    svn上传和下载项目
    当启动tomcat时出现tomcat setting should be set in tomcat preference page
    Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor
    eclipse中选中一个单词 其他相同的也被选中 怎么设置
    Spring Boot的@SpringBootApplication无法引入的问题
    最全的SpringCloud视频教程
  • 原文地址:https://www.cnblogs.com/macliu/p/4369780.html
Copyright © 2011-2022 走看看