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类型的更多相关文章

  1. javascript高级程序设计读书笔记

    第2章  在html中使用javascript 一般都会把js引用文件放在</body>前面,而不是放在<head>里, 目的是最后读取js文件以提高网页载入速度. 引用js文 ...

  2. JavaScript高级程序设计-读书笔记(1)

    第1章 JavaScript简介 JavaScript是一种专为与网页交互而设计的脚本语言,由下列三个不同的部分组成: l        ECMAScript:提供核心语言功能: l        文 ...

  3. javascript高级程序设计读书笔记----引用类型

        Array类型. ECMAScript数组的每一项可以保存任何类型的数据. 数组大小是可以动态调整的. 创建数组第一种基本方式方式: 使用Array构造函数 var colors = new ...

  4. javascript高级程序设计读书笔记-事件(一)

    读书笔记,写的很乱   事件处理程序   事件处理程序分为三种: 1.html事件2. DOM0级,3,DOM2级别  没有DOM1 同样的事件 DOM0会顶掉html事件   因为他们都是属性  而 ...

  5. javascript高级程序设计 读书笔记2

    第五章 引用类型 对象是引用类型的实例,引用类型是一种数据结构,将数据和功能组织在一起.描述的是一类对象所具有的属性和方法.对象是某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数俩创建 ...

  6. Javascript高级程序设计读书笔记(第六章)

    第6章  面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...

  7. JavaScript高级程序设计-读书笔记(7)

    第22章 高级技巧 1.高级函数 (1)安全的类型检测 在任何值上调用Object原生的toString()方法,都会返回一个[object NativeConstructorName]格式的字符串. ...

  8. JavaScript高级程序设计-读书笔记(3)

    第8章 BOM 1.window对象 (1)全局作用域 BOM的核心对象是window,它表示浏览器的一个实例.在浏览器中,window对象既是通过JavaScript访问浏览器窗口的一个接口,又是E ...

  9. javascript高级程序设计 读书笔记1

    第二章  在HTML中使用JS 加载JS有三种:行内,head头部和外部链接JS   最好使用外部链接<script src="example.js" ></sc ...

随机推荐

  1. Java数组遍历

    1.数组声明格式: 数据类型 [] 数组名 = new 数据类型[长度]: 数组长度一旦确定无法更改. 数组里的数据必须是相同类型或自动向上转型后兼容的类型 2.数组遍历 //一维数组 String ...

  2. linux c 链接详解2-定义和声明

    2定义和声明 摘自:linux c编程一站式学习 可以学会extern和static用法,头文件知识. 2.1. extern和static关键字 在上一节我们把两个程序文件放在一起编译链接,main ...

  3. how to use gflags

    参考https://blog.csdn.net/jcjc918/article/details/50876613 安装: git clone https://github.com/gflags/gfl ...

  4. Linux系统分辨率设置

    linux 设置分辨率 如果你需要在linux上设置显示屏的分辨率,分两种情况:分辨率模式存在与分辨率模式不存在,具体如下. 1,分辨率模式已存在 1)如何查询是否存在: 图形界面:在System S ...

  5. 【转】java中JVM的原理

    转载自https://blog.csdn.net/witsmakemen/article/details/28600127/ 一.java虚拟机的生命周期: Java虚拟机的生命周期 一个运行中的Ja ...

  6. HashMap不能使用基本数据类型作为key

    HashMap存储元素采用的是hash表存储数据,每存储一个对象的时候,都会调用其hashCode()方法,算出其hash值,如果相同,则认为是相同的数据,直接不存储,如果hash值不同,则再调用其e ...

  7. Dubbox本地 JAR包部署与安装

    Dubbox的jar包并没有部署到Maven的中央仓库中,大家在Maven的中央仓库中可以查找到Dubbo的最终版本是2.5.3 , 阿里巴巴解散了Dubbo团队后由当当网继续维护此项目,并改名为 D ...

  8. 全栈开发React-私有路由

    demo import React from 'react'; import {Route,Redirect} from 'react-router-dom' import {connect} fro ...

  9. 因为看见,所以发现:QBotVariant谢绝落幕

    互联网给人带来便捷的同时,其公开大量的资源也同样给恶意利用者带了便捷,越来越多公开的恶意程序源码降低了对外攻击.入侵的难度,使得安全问题愈加严重. 阿里云安全团队从今年5月份监测到一BOT家族,其样本 ...

  10. UNP学习 多播

    一.概述 单播地址标识单个接口,广播地址标识子网上的所有接口,多播地址标识一组接口. 单播和广播是编址方案的两个极端,多播的目的就在于提供一种折衷的方案. 二.多播地址 我们必须区分IPv4多播地址和 ...