一、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. Flume的Avro Sink和Avro Source研究之二 : Avro Sink

    啊,AvroSink要复杂好多:< 好吧,先确定主要问题: AvroSink为啥这么多代码?有必要吗?它都有哪些逻辑需要实现? 你看,avro-rpc-quickstart里是这么建client ...

  2. UOJ180 【UR #12】实验室外的攻防战

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  3. Don't add unneeded context不要加不需要的文本

  4. pandas通过字典生成dataframe

    1.将一个字典输入: 该字典必须满足:value是一个list类型的元素,且每一个key对应的value长度都相同: (以该字典的key为columns) >>> import pa ...

  5. Asp.net WebAPI 使用流下载文件注意事项

    public HttpResponseMessage Post(string version, string environment, string filetype) { var path = @& ...

  6. Liberty glance 新功能 healthcheck

    oslo.middleware‘s healthcheck http://specs.openstack.org/openstack/oslo-specs/specs/kilo/oslo-middle ...

  7. 使用JMeter建立接口测试

    [需求]某组机器是Android和iOS输入法接口服务器,有很多重要的接口,例如:升级,网络开关,热词等.现在有3台机器过保要下线,新申请了3台机器,需要验证一下这3台机器接口的正确性. [测试步骤] ...

  8. 修复 Xcode 错误 “The identity used to sign the executable is no longer valid”

    如图: 解决方法来自:http://stackoverflow.com/questions/7088441/the-identity-used-to-sign-the-executable-is-no ...

  9. oralce 索引(2)

    B-Tree 索引 本文来自网上整理 来自以下博客内容 http://www.360doc.com/content/13/0712/11/13136648_299364992.shtml; http: ...

  10. Handsontable-一款仿 Excel效果的表格插件使用总结 96

    最近在做一个关于报表管理的项目,发现了一款很好用的jQuery插件-Handsontable.它真的特别给力,在 Excel 中可进行的操作,你几乎都可以在网页中做到,如拖动复制.Ctrl+C .Ct ...