今天学习了一下《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. 关于bootStrapdialog 学习心得

    在用play这个框架做项目的时候,我们的背景以及一些插件用的都是 bootStrap3.0的JS以及CSS 这次用到的bootStrapdialog 所需要演示的效果 就是 在一个网页系统里,  当你 ...

  2. 给EcStore商城会员添加推广返利功能

    EcStore商城后台应用中心安装“网站推广”应用,会员成为推广员有二种途径:一是后台/推广设置/推广员审核/推广注册模式设为:需注册后审核成为推广员 此模式下前台会员在使用推广前,需要在会员中心申请 ...

  3. python之6-4装饰器.md

    装饰器看的说实话真心郁闷,群里一伙计说了好一会,听得一愣一愣的,查了点资料,又自己试了下,算是明白了一些,记录记录=.=更郁闷的是,博客园的markdown标记支持怎么和为知的不匹配,这转过来的文章很 ...

  4. HDU 5417 Victor and Machine

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5417 Problem Description Victor has a machine. When t ...

  5. requestAnimationFrame动画方法

    一.动画方式 在HTML5/CSS3时代,实现动画的方式有许多种: 你可以用css3的animation和@keyframes: 可以用css3的transition: 还可以用原始的setTimeo ...

  6. 《Programming WPF》翻译 第3章 3.内嵌控件

    原文:<Programming WPF>翻译 第3章 3.内嵌控件 WPF提供了一系列内嵌控件.其中大多数符合标准的你已经熟悉的Windows控件类型.注意到没有一个是包装在旧的Win32 ...

  7. HashMap非线程安全分析

    通过各方资料了解,HashMap不是线程安全的,但是为什么不是线程安全的,在什么情况下会出现问题呢? 1. 下面对HashMap做一个实验,两个线程,并发写入不同的值,key和value相同,最后再看 ...

  8. 【转】UltraISO制作U盘启动盘安装Win7/9/10系统攻略

    U盘安装好处就是不用使用笨拙的光盘,光盘还容易出现问题,无法读取的问题.U盘体积小,携带方便,随时都可以制作系统启动盘. U盘建议选择8G及以上大小的. 下面一步一步讲解如果制作U盘安装盘: 1.首先 ...

  9. Find Median from Data Stream 解答

    Question Median is the middle value in an ordered integer list. If the size of the list is even, the ...

  10. POJ 2010 Moo University - Financial Aid 优先队列

    题意:给你c头牛,并给出每头牛的分数和花费,要求你找出其中n(n为奇数)头牛,并使这n头牛的分数的中位数尽可能大,同时这n头牛的总花费不能超过f,否则输出-1. 思路:首先对n头牛按分数进行排序,然后 ...