数组

数组中的每个元素的位置是索引,索引是基于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. php基础教程-语法

    PHP 脚本可放置于文档中的任何位置.PHP 脚本以 <?php 开头,以 ?> 结尾: <?php // 此处是 PHP 代码 ?> PHP 文件的默认文件扩展名是 &quo ...

  2. How Do Annotations Work in Java?--转

    原文地址:https://dzone.com/articles/how-annotations-work-java Annotations have been a very important par ...

  3. Tools - VirtualBox

    为CentOS虚拟机安装增强功能 启动CentOS虚拟机,点击"菜单 -> 设备 -> 安装增强功能". vboxadd的映像文件将会被挂载到虚拟机,在桌面也可以看到, ...

  4. S Gallery – 很有特色的响应式 jQuery 相册插件

    S Gallery 是一款响应式的 jQuery 相册插件.使用了 HTML5 全屏 API 以及 CSS3 动画 和 CSS3 转换,所以只能在支持这些功能的浏览器中使用. 这款插件它有一个特色功能 ...

  5. 决战JS(二)

    紧接着上次的<决战JS>,分析总结一些比较实用的DEMO与新手分享,望大神拍砖. demo5.点击隐藏: 要实现这个功能只需要知道在onclick事件中加入对父节点的样式dislay设置为 ...

  6. 在浏览器输入网址到页面加载完毕中间到底发生了什么?(Browser-->Server)

    最近在学习韩老师的php视频,中间有讲到发送请求到服务器返回内容,以前对这个理解并不深刻,虽然以前也知道一部分,这次听了之后收获良多:所以我就画了个流程图,从浏览器输入网址到服务器返回信息,浏览器渲染 ...

  7. 【原创】Kakfa serializer包源代码分析

    这个包很简单,只有两个scala文件: decoder和encoder,就是提供序列化/反序列化的服务.我们一个一个说. 一.Decoder.scala 首先定义了一个trait: Decoder[T ...

  8. 【原创】jQuery 仿百度输入标签插件

    1.先上效果图 2.调用方式 <link href="/Styles/tagsinput.css" rel="stylesheet" type=" ...

  9. 实时数据显示--SignalR实例演示

    近段时间,有实现一个看板的功能,就是用户更新信息时,即是对数据库的数据进行插入,更新,或是删除时,在墙上的屏幕的数据不需要人为去刷新,用户就能看到更新后的数据. 实现此功能,Insus.NET使用Si ...

  10. Object C中的数据类型表

    类型 例子 NSLog chars char 'a', '\n'  %c short int   — %hi, %hx, %ho unsigned short int   %hu, %hx, %ho ...