今天学习了一下《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);//
a.length = a.length-3;
console.log(a.length);//
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);//

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);// //使用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);//

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);// //使用pop从数组后面删除一个数组元素,length值减1;
b.pop();
console.log(b);//[-2, -3, -4, -5, 0, 1, 2, 3, 4]
console.log(b.length);// //使用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);//

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

五、数组的遍历:

javascript 数组学习(一)的更多相关文章

  1. Javascript数组学习

    记录下学习数组的过程 1.创建数组 var ary1 = new Array();//空数组 var ary2= [] ;//字面量 2.数组检测 //方法一 if(array instanceof ...

  2. 【学习笔记03】Javascript数组学习

    数组定义的方法一: var Myarr=new Array(); //先声明一维 for(var i=0;i<2;i++){ //一维长度2 Myarr[i]=new Array(); //再声 ...

  3. JavaScript数组学习总结

    数组   数组 1.数组:数组是一组数据(数据类型不限,任意)的有序集合===>我们写代码,一般一个数组只放一种数据类型的数据 2.我们写代码,一般一个数组只放一种类型的数据 3.注意: 大多数 ...

  4. javascript数组学习1

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. JavaScript 数组学习总结

    类数组转数组 ES5解决方案 let arr = Array.prototype.slice.call(arrlike) ES6解决方案 let arr = Array.from(arrlike) / ...

  6. JavaScript数组(二)实例

    一.Js 数组示例常用操作. $(function () { Javascript数组学习 var nums = new Array([10], [5],[ 8], [2], [3]); 数组反转 n ...

  7. RX学习笔记:JavaScript数组操作

    RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...

  8. [前端JS学习笔记]JavaScript 数组

    一.JavaScript数组的奇葩 大多数语言会要求数组的元素是同个类型, 但是JavaScript允许数组元素为多种类型. var arr = ["羽毛球", 666, {&qu ...

  9. JavaScript基础学习(三)—数组

    一.数组简介     JavaScript数组的每一项都可以保存任何类型的数据,也就是说数组的第一个位置保存字符串,第二个位置可以保存数值,第三个位置可以保存对象,而且数组的大小是可以动态调整的,即可 ...

随机推荐

  1. Remove掉Request.QueryString

    好久上博客来了,最近有点忙,有点懒. 今天在解决一个Request.QueryString 传值的问题上遇到了,当不是第一次加载时需要把Request.QueryString的值赋值为null,刚开始 ...

  2. 数据链路层-点对点协议PPP

    在通信质量较差的年代,在数据链路层使用可靠传输协议曾是一个好的办法.因此,能实现可靠传输的高级数据链路控制HDLC(High-Level Data Link Control)就称为当时比较流行的数据链 ...

  3. 克隆contos 出现 Error:No suitable device found: no device found for connection &amp;quot;System eth0&amp

    二.问题 这时我复制好的虚拟机,启动登陆进去(用户名和密码跟之前那台是一样的),修改好IPADDR,然后网卡重启出现问题? #service network restart 出现问题:Error:No ...

  4. NAS4Free 安装配置(三)基本配置

    基本配置 在浏览器中输入地址,进入管理界面(我的是http://192.168.0.10) 登录界面 初始用户名:admin,初始密码:nas4free 首页 进入基本配置 这里可以选择语言,有中文, ...

  5. 六度分离--hdu1869

    六度分离 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. [TYVJ] P1001 第K极值

    第K极值   背景 Background 成成第一次模拟赛 第一道    描述 Description 给定一个长度为N(0<n<=10000)的序列,保证每一个序列中的数字a[i]是小于 ...

  7. android 导航布局

    http://blog.csdn.net/wangjinyu501/article/details/8140588 http://www.cnblogs.com/hanyonglu/archive/2 ...

  8. Qt编程之UI与控件布局

    当然,大家都知道UI界面可以用Qt Designer在约束环境下设置编辑.ui文件,再将.ui文件转换成对应的ui_XXX.h文件,这头文件中的内容是:用C++语言实现真正的界面布局.uic -o & ...

  9. 【转】Android出现“Read-only file system”解决办法

    原文网址:http://www.111cn.net/sj/android/44496.htm 下面介绍一篇Android出现“Read-only file system”解决办法 有碰到这类问题的朋友 ...

  10. Jquery 概念性内容编辑器

      概念性jQuery内容编辑器,这是一款非常有特色的jQuery编辑器,该编辑器支持文字.列表.视频.引用等功能,是一款小巧简洁,富有个性化的jQuery内容编辑器插件. 代码: <!doct ...