一、Array

  特点:

数组的长度是可变的;

数组的索引可以是数字、字符串;

数组的内容可以是任意内容;

可以通过索引获取之前不存在的一个位置,其值为undefined;

1、构造函数:

new Array();
new Array(length);
new Array(element0, element1, ..., elementn);

例:var a=new Array(1);a[0];  //undefined;  在初始化时,指定其长度为n,由于尚未指定数组内容,因此获取时只能是undefined;

由于javascript不是一门强类型的语言,所以索引可以是数字、字符串;其内容可以是任意类型的数据

3、length:获取或设置数组的长度

var a= new Array(3);var a=[1,2,3];a[5]=5; a['1']='1';a['a']='a';
a['1'];  //"1"
a[1];   //"1"
a['a'];   //"a"
a.a;    //"a"
a[a];  //undefined
a.length; //6;

如上所示, a['1']='1'; 当索引为字符串且字符串内容为数字时,javascript隐式将其转换为数字,并将内容 '1' 替换数字 1 。

当索引为其他字符串时,如:a['a'] 实际上是将其作为数组的一个属性而非数组内容,因此既可以通过索引访问。也可以通过属性访问,如:a.a;

(1)、即使初始化指定 length,也可以在超出范围的索引进行操作,如上例,设置 length 为3,a[5]=5;则 length被修改为6;

(2)、length 属性表示的只是 索引为数字或可以隐式转换为数字的元素数量。在上面的例子中,由于 a['a'] 实际上通过数组的属性操作而不是索引,所以对 length 属性无影响,此时执行 a.length;  //6; 可见其并没有包含a['a']

(3)、当设置的 length 属性小于当前元素时,超出该范围的元素将被移除。例:

var a= new Array(3);var a=[1,2,3];a[5]=5; a['1']='1';a['a']='a';
a;                 //[1, "1", 3, undefined × 2, 5]
a[5];            //5;
a.length;       //6;
a.length=5;  //5;
a[5];    //undefined;
a.a;      //"a"
a['a'];  //"a"

注意即使 a.length=0;此时依然可以通过 a['a'] 获取数据,再次证明通过字符串索引操作数组只是操作数组的属性而不是数组元素。

4、delete:删除数组元素;

delete 将元素内容删除,其值变为 undefined,因为在javascript中,不存在的东西均为 undefined;

例:

var a= new Array(3);var a=[1,2,3];a[5]=5; a['1']='1';a['a']='a';a;  //[1, "1", 3, undefined × 2, 5];

delete a[0]; delete a['a'];  //true;

a;  //[undefined × 1, "1", 3, undefined × 2, 5]

a['a'];  //undefined

a.length;  //6

5、 for——in 循环:用于遍历数组、对象,但不能取代常规的 for 循环

var result='';
for(var i in a)
{
  result=result+'index: '+ i+', value: '+a[i]+';';
}
result;  

//"index: 0, value: 1;index: 1, value: 1;index: 2, value: 3;index: 5, value: 5;index: a, value: a;index: clone, value: function (){ return this.concat(); };"

6、数组常用方法

方法 说明
arr1.concat(arr2) 连接两个或更多的数组;但不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
arr1.join(separator) 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。否则默认为,
arr1.pop() 删除并返回数组的最后一个元素;直接改变原数组。
arr1.push() 向数组的末尾添加一个或更多元素,并返回新的长度。
arr1.reverse() 颠倒数组中元素的顺序;直接改变原数组。
arr1.shift() 删除并返回数组的第一个元素;直接改变原数组。
arr1.unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
arr1.slice(start,end) 从某个已有的数组返回选定的元素但不修改数组;参数为正表示从左往右数,负表示从右往左数;返回数据包含 start,但不包含 end;
arr1.sort(function) 对数组的元素进行排序;参数函数用于规定其排序顺序,没有参数则默认按照字符编码的顺序进行排序;小的排在大的前面;
arr1.splice(index,n,data……) 删除n个元素,并向数组添加任意个新元素;直接修改原始数组。返回被删除的元素。
arr1.toSource() 返回该对象的源代码。只有 Firefox 支持。
arr1.toString() 把数组转换为字符串,并返回结果。
tarr1.toLocaleString() 把数组转换为本地数组,并返回结果。使用地区特定的分隔符把生成的字符串连接起来
arr1.valueOf() 返回数组对象的原始值

例:

  • concat():

var a=new Array(3);a[0]=0;a[1]=1;a[2]=2; var b=new Array(3);b[0]=3;b[1]=4;b[2]=5;

a.concat(b);  //[0, 1, 2, 3, 4, 5];

a;  //[0, 1, 2];  证明 concat() 方法并没有改变原有数组;

a.concat(b,a);  //[0, 1, 2, 3, 4, 5, 0, 1, 2]  

a.concat(b).concat(a);  //[0, 1, 2, 3, 4, 5, 0, 1, 2]   与上面的方式结果一致

  • join()

a.join();  //"0,1,2"  

a.join('|');  //"0|1|2"

  • pop()

a.pop();  //2;返回最后一个元素 2 ;并删除该元素

a;  //[0, 1];

  • push()

a.push(2);  //3; 数组新的长度为3

a;  //[0, 1, 2]

  • reverse()

a.reverse();  //[2, 1, 0];

a.reverse();  //[0, 1, 2];

  • shift()

a.shift();  //0;  //返回数组原来的第一个元素;

a;  //[1, 2]

  • unshift()

a.unshift(0);  //3 ;数组新的长度;

a;  //[0, 1, 2];

  • slice(start,end):参数从0开始,返回数据包含 start,但不包含 end; 无 end 表示到最后。

a.slice(1);  // [1, 2];  从第二个数据开始,到最后

a.slice(1,2);  //[1];  从第二个数据开始,到第三个数据结束,但不包含第三个数据。

a.slice(1,-2);  //[];  从第二个数据开始,到倒数第二个数据结束,但不包含倒数第二个数据。而 a 的第二个数据也是倒数第二个数据,所以无返回值。

a.slice(-2,-1);  //[1];  从倒数第二个开始,到倒数第一个截止,但不包含倒数第一个

  • sort()

a.sort();  //[0, 1, 2];  

var a=new Array(3);a[0]='18';a[1]='10';a[2]='2';a;  //["18", "10", "2"];  

a.sort();  //["10", "18", "2"];  默认按照字符编码的顺序进行排序;从第一位开始排序;

可以提供比较函数,按照自定义规则进行排序,比较函数提供要比较的两个参数,然后返回一个用于说明这两个值的相对顺序的数字。

如:比较函数应该具有两个参数 a 和 b,其返回值如下:

  1. 若 a 小于 b,则返回一个小于 0 的值。
  2. 若 a 等于 b,则返回 0。
  3. 若 a 大于 b,则返回一个大于 0 的值。

例:function sortab(a,b) { return a-b; } a.sort(sortab);  //["2", "10", "18"]  //在 - 运算时,现将参数隐式转换为数字;

  • splice(index,n,data……)

var a=new Array(3);a[0]=0;a[1]=1;a[2]=2;a;  //[0, 1, 2];

a.splice(1,1,'好的','坏的');  //[1];   返回被删除的与元素。

var b=['111','222'];a;  //[0, "好的", "坏的", 2];  将两个元素 '好的','坏的' 插入被删除元素的位置。

a.splice(1,2,b);  //["好的", "坏的"];  返回被删除的元素

a;  //[0,Array[2], 2];  上一步中插入的数据是一个数组,所以出现这种情况。

a[1][0];  // "111"  

  • toString()

a.toString();  //"0,111,222,2"

  • toLocaleString()

a.toLocaleString();  //"0,111,222,2"

  • valueOf()

a.valueOf();  //[0,Array[2], 2]

javascipt——对象的概念——数组的更多相关文章

  1. 关于JavaScipt对象的基本知识

    关于JavaScipt对象的基本知识 JavaScript是运用“对象化编程”的,又叫“面向对象编程”的.所谓“对象化编程”,意义是把JavaScript能涉及的领域划分成各种对象,对象后面还连续划分 ...

  2. [Effective JavaScript 笔记]第58条:区分数组对象和类数组对象

    示例 设想有两个不同类的API.第一个是位向量:有序的位集合 var bits=new BitVector(); bits.enable(4); bits.enable([1,3,8,17]); bi ...

  3. OC中对象拷贝概念

    OC中的对象拷贝概念,这个对于面向对象语言中都会有这种的问题,只是不同的语言有不同的解决方式:C++中有拷贝构造函数,Java中需要实现Cloneable接口,在clone方法中进行操作.但是不过OC ...

  4. 简述JavaScript对象、数组对象与类数组对象

    问题引出 在上图给出的文档中,用JavaScript获取那个a标签,要用什么办法呢?相信第一反应一定是使用document.getElementsByTagName('a')[0]来获取.同样的,在使 ...

  5. yii2得到的数据对象转化成数组

    yii2得到的数据对象转化成数组需要用到asArray().1.Customer::find(['id' => $id])->asArray()->one();2.$model = ...

  6. struts2:遍历自定义字符串数组,遍历Action实例所引用对象中的数组

    在struts2:OGNL表达式,遍历List.Map集合:投影的使用一文中已经讲述了OGNL遍历List.Map集合等功能. 本文简单写一个遍历数组的示范程序. 1. 遍历自定义字符串数组 < ...

  7. js之数组,对象,类数组对象

    许久不写了,实在是不知道写点什么,正好最近有个同事问了个问题,关于数组,对象和类数组的,仔细说起来都是基础,其实都没什么好讲的,不过看到还是有很多朋友有些迷糊,这里就简单对于定义以及一下相同点,不同点 ...

  8. 如何向java后台的对象中传数组

    1.后台对象的参数需要是是list对象 /* * copyright : GLOBALROAM Ptd Ltd * VmCreateInfo.java * Author: * zhangpengyan ...

  9. JSON对象与JSON数组的长度和遍历方法

    JSON对象与JSON数组的长度和遍历方法         1.json对象的长度与遍历                 结构:var json={“name”:”sm”,”sex”:”woman”} ...

随机推荐

  1. HDU 5925 离散化

    东北赛的一道二等奖题 当时学长想了一个dfs的解法并且通过了 那时自己也有一个bfs的解法没有拿出来 一直没有机会和时ji间xing来验证对错 昨天和队友谈离散化的时候想到了 于是用当时的思路做了一下 ...

  2. COUNT(DISTINCT a.TransportOrderID)的用法

    DECLARE @StartDate DATETIME= '2017-12-20 00:00:00';DECLARE @EndDate DATETIME= '2017-12-26 00:00:00'; ...

  3. tp5定时器

    # 定时器 * * * * * cd /home/wwwroot/default/dexin/dragon && /usr/bin/php think order --option 1 ...

  4. 【转】ORACLE的数据类型

    原文;http://linjian004.bokee.com/3916067.html 常用的数据库字段类型如下: 字段类型 中文说明 限制条件 其它说明 CHAR 固定长度字符串 最大长度2000 ...

  5. DH01-简单工厂模式

    模式简介 简单工厂模式又称静态工厂方法模式,定义一个用于创建对象的接口.其主要组成部分为: 工厂类角色:模式的核心,具有一定的商业逻辑和判断逻辑.如示例中的类AnimalSpecies 抽象产品角色: ...

  6. 51nod 1128 二分

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1128 1128 正整数分组 V2 基准时间限制:1 秒 空间限制:131 ...

  7. 理解WCF(第一部分,有參考他人)

    依舊不廢話  上乾貨! 1.什么是WCF? WCF全名是:WindowsCommunication Foundation ,是一个运行库和一组 API,用于创建在服务与客户端之间发送消息的系统.它使用 ...

  8. Hbase 使用方法

    列出所有 table¶ hbase(main):> list 新增 table¶ A . 直接增加一個表 t2 hbase(main):> create 't2' B . 增加一個擁有 ' ...

  9. JSP学习笔记(九十):eclipse3.4中建立控制台程序

    1.控制台程序的建立 File->New->Application Client Project,勾选上Create a default Main class 找到Main.java,修改 ...

  10. SMB/CIFS协议简介

    1. 简介:(ServerMessage Block)服务消息块通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议.SMB从I ...