数组

数组中的每个元素的位置是索引,索引是基于32位的由0开始的数值,最大索引为(2的32次方-2),最大长度为(2的32次方-3)

数组是无类型的:元素可为任意类型;动态的:可根据需要自动增长、缩减,也可在声明时固定大小;可能是稀疏的:索引不一定是连续的,可有空缺,length为元素个数

var a = [1,2, , 3, undefined,{a:1,b:2},]; //使用Object的构造函数

var x = new Array(10) //固定长度,使用Array的构造函数

数组元素的访问a[i],和用p[‘x’]访问对象的属性一样,先把数字索引转为字符串,然后将它作为属性名来使用,数组其实是对象的特殊形式;

数组是对象,可以为它创建任意名字的属性,而只有在0 ~(2的32次方-2)之间的整数属性名才是索引,而任何其它名字都只能当做是普通属性名,小数部分为0的浮点数也是索引;

a[-5] = ‘str’; //为数组创建一个名为’-5‘的属性,值为’str’;

a[13.000] = 4; //把索引为13的元素的值设为4;

用索引访问数组比用属性访问数组要高效;

var 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);

数组的方法

push(x1,x2…) 在原数组尾部增加1个或多个元素x,返回改变后的数组长度,pop()删除最后一个元素,返回被删的元素;;

unshift(x1,x2…) 在头部一次性插入1个或多个元素,返回数组长度,后面的索引随之改变,shift() 删除第一个元素,并返回被删除的元素;

join(str) split(str) 返回一个将所有元素转化为字符串并用符号str连接而成的字符串,而split(str)则相反,按str分割为元素组成数组并返回;

a.reverse() 颠倒数组a中的元素的顺序,返回被重排后的原数组a;

a.sort(f) 无参数时按字母顺序表排序,返回被重排后的原数组a,函数f用来指定排序规则;

a.concat(6,7,[8,9],[10,[11,12]]) 返回一个新数组(含数组a的元素和所有参数作为元素,若参数为数组,则拆散为元素,但不拆也是数组的元素,[1,2,3,4,5,6,7,8,9,10,[11,12] ]);

a.slice(a,b) 返回数组的一个子数组,含从索引a到索引b(不含b)之间的元素,只有一个参数则表示从a直到到尾部,负数表示从-1开始倒着数;

a.splice(a,n,x1,x2,x3…) 改变了数组a,返回被删除的元素组成的数组(从索引a处开始删除n个元素,可选的后续参数是要在索引a处插入的元素);

toString() toLocalString() 对数组的所有元素执行该方法,最后返回用逗号分隔的所有元素的字符串形式的字符串列表,不含’[ ]’和其它分隔符,

b=a.map(function(x,i,a1){return x*x}); 遍历数组a的每个元素值来执行函数代码,然后返回一个由函数的返回值组成的新数组,该函数必须有返回值,后面2个可选参数;

b=a.filter(function(x,i,a1){return …}); 遍历数组a的元素值,根据函数的返回值是否为true来决定是否将x取出来放入最后要返回的数组,filter()会跳过空缺的元素,如:a=a.filter(function(x){return true;});或x!==undefined&&x!=null过滤掉数组中的undefined、null元素;

a.every(function(x){return x<10;}) (用来判断数组中所有元素是否都符合需求)仅当对数组中的所有元素值x执行函数判断都返回true时,最后才返回true,遍历到第一个返回false是就终止遍历,直接返回false;

a.some(function(x){return x%2==0;}),a.some(isNaN) (用来判断数组中是否有元素不符合需求)当遍历到数组中有一个元素调用判定函数返回true时,就返回true;

max=a.reduce(function(x,y){return (x>y)?x:y;}, 0) 将数组a中的所有元素按函数规则化简为‘一’,并返回这个‘一’,第二个参数是给函数的x赋初始值,reduceRight()是从右侧元素开始化简;

a.indexOf(x,i) 从头至尾搜索并返回数组或字符串a中第一个元素x的索引,若没找到则返回-1,lastIndexOf()反向搜索,可选参数i为指定从索引i处开始搜索;

Array.isArray(a) 判断对象a是否为数组,返回true/false;

delete a[n]; 删除指定元素,留下一个值为undefined的空位,数组变为稀疏数组;

遍历数组:

for(var i=0,len=a.length;i<len;i++){…} //普通数组遍历,通过索引i遍历;

for(var n in a){…} //一般用来遍历带有key的对象,遍历可枚举属性,n为属性名;

a.forEach(function(x,i,a1){…}); //forEach中的x为属性的值,i为索引,a1为数组自身,参数个数可选,forEach无法中断,直到遍历完所有元素,可通过用try来包含forEach,抛出异常而达到中断遍历;

类似为数组的对象:(字符串也是类数组,且为只读不能调用修改数组的方法)

如果对象p的所有元素的key符合数组索引的特征,可以为该对象添加length属性,这样就有了数组的特征,可以间接的调用数组的所有方法:因为他不是继承自Array.prototype,所以要间接使用Function.call方法来调用,(除concat()方法效果不同),如:Array.prototype.join.call(p,’+’),Array.prototype.slice.call(p,3);

var a1 = [1,2,3,4,5,6,7];

try {

a1.forEach(function(x,i,a){

if(x<=5){

a[i] = x+1;

}

else{

throw 'big';

}

});

}

catch(e){

console.log(e); //big

}

console.log(a1); //[ 2, 3, 4, 5, 6, 6, 7 ]

//===================

b=a1.map(function(x,i,a){

a[i]+=2;

return x+=1;

});

console.log(b); //[ 2, 3, 4, 5, 6, 7, 8 ]

console.log(a1); //[ 3, 4, 5, 6, 7, 8, 9 ]

//====================

var a1 = [{x:1,a:1},{y:2,a:2},{z:3,a:3}];

var union = function(x,y){

var a2={};

for(var q in x){

a2[q]=x[q];

}

for(var z in y) {

if (z in x) continue;

a2[z]=y[z];

}

return a2;

};

var b = a1.reduce(union);

var b1 = a1.reduceRight(union);

console.log(b); //{ x: 1, a: 1, y: 2, z: 3 }

console.log(b1); //{ z: 3, a: 3, y: 2, x: 1 }

//=====================

var p = {'0':'x','1':'s','2':'g'};

p.length=3;

var s=Array.prototype.concat.call(p,3,4,5);

console.log(s); //[ { '0': 'x', '1': 's', '2': 'g', length: 3 }, 3, 4, 5 ]

console.log(Array.isArray(p)); //false

JavaScript学习笔记-数组的更多相关文章

  1. JavaScript学习笔记——数组

    javascript数组数组是一个可以存储 一组 或是 一系列 相关数据 的 容器. 一.为什么要使用数组. (1)为了解决大量相关数据的存储和使用的问题. (2)模拟真是的世界. 二.如何创建数组 ...

  2. JavaScript学习笔记-数组(1)

    数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型.数 ...

  3. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  4. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  5. Java程序猿JavaScript学习笔记(2——复制和继承财产)

    计划和完成在这个例子中,音符的以下序列: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaSc ...

  6. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  8. JavaScript学习笔记[0]

    JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...

  9. Java程序猿的JavaScript学习笔记(1——理念)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

随机推荐

  1. 【原创】Matlab.NET混合编程技巧之找出Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 Matlab与.N ...

  2. jQuery中$.extend

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个 ...

  3. Fragment响应返回键

    Activty可以直接响应返回键,而Fragment却不行,可用如下方式: 创建一个抽象类BackHandledFragment,该类中有一个抽象方法onBackPress(),所有BackHandl ...

  4. 15个前卫的 HTML5 & CSS3 网页设计作品

    今天,我们编译收集一组使用 HTML5 和 CSS3 制作的精美网站.在此集合中,你可以看到平面设计,网页设计,作品集和企业网站设计实例. 响应式设计和基于 HTML5 & CSS3 编码的网 ...

  5. 使用 CSS3 动感的图片标题动画效果【附源码下载】

    在网站中,有很多地方会需要在图片上显示图片标题.使用 CSS3 过渡和变换可以实现动感的鼠标悬停显示效果.没有使用 JavaScript,所以只能在支持 CSS3 动画的现代浏览器中才能正常工作.您可 ...

  6. path入门 20141102-1405

    那Python有哪些缺点呢? 第一个缺点就是运行速度慢,和C程序相比非常慢, 第二个缺点就是代码不能加密. Python是解释型的 不是编译型的 Python解释器-CPython 命令行: 只需要在 ...

  7. SQL Server安全(7/11):使用跨数据库所有权链接(Cross-Database Ownership Chaining)的跨数据库安全

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  8. nth-child和蝉原则实现的奇妙随机效果(译)

    此文翻译自charlotte jackson的<Magic randomisation with nth-child and Cicada Principle> 在做伪装的随机模式时将nt ...

  9. 7z命令行参数中的路径

    最近在自动化的过程中用到了7z命令行工具,发现其参数中的路径挺有意思的,在此总结一下.本文中所有demo使用的7z版本为:15.14 x64. 压缩某个文件夹 下面的命令会把g:\temp\目录和目录 ...

  10. Linux - 修复Ubuntu错误“System program problem detected”

    The error "System program problem detected" comes up when a certain application crashes. U ...