一、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. C# 关于 上传文件 大小限制问题

    <system.web> <compilation debug="true" targetFramework="4.5" /> < ...

  2. java中@Qualifier("string")是什么用法

    @Qualifier("XXX") Spring的Bean注入配置注解,该注解指定注入的Bean的名称,Spring框架使用byName方式寻找合格的bean,这样就消除了byTy ...

  3. 10.0.4_CentOS_120g_for_Qt5.3.2

    对应 VMware Workstation 版本为:“10.0.4 build-2249910”

  4. Mine_目标

    1. hibernate 有简单的方式 可以用于 DDL操作吗? “ DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE.ALTER ...

  5. python定制

    1.简单定制   a.使用time模块的localtime方法获取时间 b.time.localtime返回struct_time的时间格式 c.表现你的类:__str__和__repr__ 注:当属 ...

  6. Tedis:淘宝的Redis的Java客户端开发包

    Tedis:淘宝的Redis的Java客户端开发包   http://www.open-open.com/lib/view/open1389880631976.html   Tedis Tedis是另 ...

  7. 解决:return _compile(pattern, flags).search(string) TypeError: expected string or buffer

    今天写爬虫,爬取MM图片页面的标题时,遇到了一个问题,上图: 看看我的代码: import urllib import urllib2 import re class JPMSG: def __ini ...

  8. 让您的Chrome浏览器允许本地环境支持Ajax

    对于网站前端人员来说,我们在本地开发程序的时候如果用到Ajax的话,通常会使用Firefox来测试,因为Firefox的安全策略支持本地Ajax,IE系列和Chrome都不支持. 不过,经过笔者亲身体 ...

  9. XMLSchema验证

    一.什么是Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模式. DTD的局限性: 1 ...

  10. Jquery中.ajax和.post详解

    之前写过一篇<.NET MVC 异步提交和返回参数> ,里面有一些ajax的内容,但是不深入,这次详细剖析下jquery中$.ajax的用法. 首先,上代码: jquery-1.5.1 $ ...