Javascript高级程序设计--读书笔记之Array类型
1.数组的lenght属性
数组的lenght属性很有特点---他不是只读的,可以同过修改这个属性来向数组的末尾添值加或删除值,
删除值
var color = ["red", "blue", "green"];
color.length = 2;
alert(color[2]); //undefined
新增值
var colors = ["red", "blue", "green"];
colors[colors.length] = “black”; //在位置3添加一种新颜色
colors[colors.length] = "brown"; //在位置4添加一种新颜色
colors[99] = "black";
alert(colors.length); //
数组的最后一项的索引始终都是lenght-1,因此下一个新项的位置就是length,每当数组的长度发生变化时其length属性的值就会重新更新,长度值等于最后一项的索引加1,在上一个例子中,位置3到位置89都是不存在的,所以访问他们都将返回undefined,数组最多可以包含4294967295个项,如果超过这个上线就会发生异常,创建一个与这个值相近的数组,可能导致运行时间超长的脚本错误,
2.栈方法
栈是一种LIFPO(Last-In-Fast-Out,后进先出),最新添加的项被最早移除,ECMAScript为数组专门设计push()和pop()方法实现类似栈的行为
push()方法接受任意数量的参数,把他们添加到数组的末尾,并返回修改数组的长度,pop()数组末尾移除最后一项减少数组的length值,返回移除的项
3.队列方法
队列的访问规则是FIFO(Fast-In-Fast-Out,先进先出)实现这一操作方法就是shift()和push(),shift()能移除数组的第一项并返回该项,ECMAScript还为数组提供了一个unshift()顾名思义与shift()相反在数组前添加任意项并返回新长度。
3.重排方法
reveres()和sort() , reveres()会反转数组项的顺序,
var values = [1, 2, 3, 4, 5];
values.reverse();
alert(values); //5, 4, 3, 2, 1
sort()在默认的情况下会按升序排列数组项,sort()会对每一项调用 toString(),然后比较字符串确定如何排序,即使数组的每一项都是数值,最终比较的也是字符串
var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0, 1, 10, 15, 5
sort()可以接受一个比较函数作为参数,如果第一个参数位于第二个参数之前则返回一个负数,如果两个参数相等则返回零,如果第一个参数位于第二个之后则返回一个正数,
function compare(value1, value2){
if(value1>value2){
return -1;
}else if( value2<value1){
return 1
}else{
return 0
}
}
4.操作方法
concat()方法可以基于当前数组项创建一个新数组,,在没有传递参数的情况下他只是复制当前数组并返回副本,如果传递给concat()一个或多个数组,该方法会将这些数组的每一项都添加到结果数组中,如果传递的不是数组就会简单的添加到结果数组的末尾
var color = ["red", "green", "blue"];
colors = color.concat("yellow", ["black", "brown"]);
alert(color); //red,green,blue
alert(colors); //red,green,blue,yellow.black,brown
下一个方法是slice(),他能基于当前数组一个或多个项创建一个新数组,接受两个参数,返回项的起始位置和结束位置,但不包括结束位置的项,在只有一个参数的情况下只有一个参数的情况下返回指定位置到数组结束的所有项,
var colors = ["red", "green", "blue", "black"];
var colors1 = colors.slice(1);
var colors2 = colors.slice(1,2);
alert(colors1); //green, blue, black
alert(color2); //green
如果slice()方法中有一个是负数则用数组的长度加上该数来确定相应的位置,例如在一个包含5项的数组中调用slice(-2, -1),与调用slice(3,4)的结果相同,如果结束为重小于起始位置则返回空数组
splice() 方法可以说是数组里最强大的一个方法了,主要的用途是向数组的内部插入项,但是使用这种方法的方式有三种,
删除:可以删除任意数量的项只需指定两个参数要删除的第一项的位置和要删除的项数,例如:splice(0,2)会删除数组的前两项。
插入:可以向指定的位置插入任意数量的项,只需指定三个参数,起始位置,0(要删除的项数)和要插入的项,如果要插入多个项,可以在向里传第四、第五,以至任意多个项,例如splice(2,0,"red", "green"),会从当前数组的位置2插入字符串“red”,"green".
替换:可以向指定的位置插入任意数量的项,,并且同时删除任意数量的项,只需指定三个参数,起始位置要删除项数和要插入的任意数量的项,插入的项数不必与删除的项数相同,例如splice(2,1,"green","red"),会删除数组位置的第二项,并在位置2开始插入字符串“green”,"red"
splice()方法始终返回一个数组,该数组中包含从原始数组中删除的项(如果没有删除任何项则返回空数组),看代码
var colors = ["red", "green", "blue"];
var removed = colors.splice(0,1) //删除第一项
alert(colors); //green blue
alert(removed); //red 返回的数组只包含一项 removed = colors.splice(1,0,"yellow", "orange"); //从1的位置开始插入两项
alert(colors); //green,yellow,orange,blue
alert(removed); // 返回一个空数组 removed = colors.splice(1,1,"red","purple"); //插入两项删除一项
alert(colors); //green,red,purplr,orange,blue
alert(removed); //yellow
一句话总结splice()方法, 接受“三个”参数,起始位置, 要删除的项数(可以为0不删除),要插入的值(任意项)
Javascript高级程序设计--读书笔记之Array类型的更多相关文章
- javascript高级程序设计读书笔记
第2章 在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...
- JavaScript高级程序设计-读书笔记(1)
第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l ECMAScript:提供核心语言功能: l 文 ...
- javascript高级程序设计读书笔记----引用类型
Array类型. ECMAScript数组的每一项可以保存任何类型的数据. 数组大小是可以动态调整的. 创建数组第一种基本方式方式: 使用Array构造函数 var colors = new ...
- javascript高级程序设计读书笔记-事件(一)
读书笔记,写的很乱 事件处理程序 事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别 没有DOM1 同样的事件 DOM0会顶掉html事件 因为他们都是属性 而 ...
- javascript高级程序设计 读书笔记2
第五章 引用类型 对象是引用类型的实例,引用类型是一种数据结构,将数据和功能组织在一起.描述的是一类对象所具有的属性和方法.对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数俩创建 ...
- Javascript高级程序设计读书笔记(第六章)
第6章 面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...
- JavaScript高级程序设计-读书笔记(7)
第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...
- JavaScript高级程序设计-读书笔记(3)
第8章 BOM 1.window对象 (1)全局作用域 BOM的核心对象是window,它表示浏览器的一个实例.在浏览器中,window对象既是通过JavaScript访问浏览器窗口的一个接口,又是E ...
- javascript高级程序设计 读书笔记1
第二章 在HTML中使用JS 加载JS有三种:行内,head头部和外部链接JS 最好使用外部链接<script src="example.js" ></sc ...
随机推荐
- [转] 一位ACMer过来人的心得
刻苦的训练我打算最后稍微提一下.主要说后者:什么是有效地训练? 我想说下我的理解.很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了.其实,这既不是充分条件.也不会是必要条件. 我觉 ...
- qt 如何使用 lamda 表达式接收线程中发射的数据,并在里面更新 UI ?
Qt 信号和槽连接方式 常量 描述 Qt::AutoConnection (默认)如果接收方位于发出信号的线程中,则使用Qt::DirectConnection.否则,使用Qt::QueuedConn ...
- 【转】C++ STL中常见容器的时间复杂度
map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除 ...
- maven上传源码脚本
mvn deploy:deploy-file -Dmaven.test.skip=true -Dfile=./target/bbc-common-1.0.0-source.jar -DgroupId= ...
- Git忽略已经跟踪的文件 转摘:http://blog.csdn.net/huguohuan/article/details/7380349
某工程project用Git管理代码,但是在他的根目录下有个配置文件,比如project.iws是不需要git每次跟踪它的修改记录的. 一般做法是在.gitignore文件中添加一行 project. ...
- C# 中类重写 ToString 方法
一,C# 中的每个类或结构都隐式继承 Object 类.因此,C# 中的每个对象都会获得 ToString 方法,此方法返回该对象的字符串表示形式.而同时在Object 中的ToString是虚方法则 ...
- etcd扩展使用
etcd我已经提到很多次了,前面的可以自己查看.v3版本改用grpc接口,很简单,非常简单,易上手易学习. etcd有集群部署方式,那么就涉及部署的地址,可以动态添加部署节点,这样再应用中不可能都去关 ...
- MAC如何与linux服务器传递文件
scp命令可以从本地拷贝文件到Linux服务器,也可以将Linux服务器文件下载到本地 将远程/root/articaleFetch/dist目录下文件和文件夹拷贝到dist文件夹 scp root@ ...
- 企业微信上传 带中文名称的 临时素材资源 报错 44001:empty media data
错误原因:urllib3的老版本bug,卸载掉 requests,urllib3,从新安装最新版的requests(此包内部依赖urllib3): 我从新安装的是 requests==2.22.0 及 ...
- bash date format
Bash Date To format Bash Date to a required one, bash shell provides date command along with many fo ...