一.转换方法

  所有的对象都具有toLocaleString(),toString()和valueOf()方法。调用toString()方法会返回由数组中的每个值的字符串拼接而成的一个以逗号分隔的字符串。而调用valueOf()返回的还是数组。

  

valueOf() 方法返回 Array 对象的原始值。

该原始值由 Array 对象派生的所有对象继承。

valueOf() 方法通常由 JavaScript 在后台自动调用,并不显式地出现在代码中。

注意: valueOf() 方法不会改变原数组。

eg:

 var colors=["red","green","blue"];
alert(colors.toString()); //red","green","blue
alert(colors.valueOf()); //red","green","blue
alert(colors); //red","green","blue
alert(typeof(colors.toString()));//string
alert(typeof(colors.valueOf())); //object
alert(Object.prototype.toString.call(colors.valueOf()));//[object Array]

  由上面的例子可以看出,调用数组的toString()方法,返回的是数组的字符串形式,调用valueOf()方法返回的还是数组。这里需要注意的是,由于alert()要接收字符串参数,所以它会在后台调用toString()方法,因此会得到与直接调用toString()方法相同的结果。

toLocaleString()方法

  toLocaleString()方法也会创建一个数组值的以逗号分隔的字符串,与toString()和valueOf()不同的是它为了取得每一项的值,调用的是每一项的toLocaleString()方法,而不是toString()方法。

eg:

 var person1={
toLocaleString:function(){
return "toLocale1";
},
toString:function(){
return "toSt1";
}
}
var person2={
toLocaleString:function(){
return "toLocale2";
},
toString:function(){
return "toSt2";
}
}
var person=[person1,person2];
alert(person); //toSt1,toSt2,因为它调用的是toString方法。
alert(person.toString()); //toSt1,toSt2
alert(person.toLocaleString()); //toLocale1,toLocale2

  数组继承的toLocaleString(),toString()和valueOf()方法,在默认情况下都会以逗号分隔的字符串的形式返回数组项。使用join()方法,可以使用自定义的分隔符来构建这个字符串,join()方法只接受一个参数,即用作分隔符的字符串,然后返回使用数组项的字符串。

eg:

  var colors=["red","green","blue"];
alert(colors.join(",")); //red,green,blue
alert(colors.join("||"));//red||green||blue
alert(colors.join(undefined));//red,green,blu

注意:

  (1)如果不给join()方法传入任何值,或者给它传入undefined,则使用逗号作为分隔符。IE7及更早的版本会错误的使用字符串“undefined”作为分隔符。

  (2)如果数组中的某一项的值是null或是undefined,那么该值join(),toLocaleString(),toString()和valueOf()方法返回的结果中以空字符串表示。

二.栈方法

  栈是一种LIFO(Last-In-First-Out 后进先出)的数据结构,即最新添加的项最早被移除。栈中项的插入(推入)和移除(弹出),值发生在栈顶。ECMAScript提供push()和pop()方法来实现类似栈的行为。

  1.push(),添加项,返回修改后的数组长度。

  2.pop(),减少,返回移除的项。

eg:

 var colors=new Array();
var count=colors.push("red","green");
alert(count);//
count=colors.push("pink");
alert(count);//
var item=colors.pop();
alert(item);//pink
alert(colors);//red,green

  栈方法可以和其他数组方法一起使用。

三.队列方法

  队列数据结构的访问规则是FIFO(First-In-First-Out,先进先出)。队列在列表的末端添加项,在列表的前端移除项。

  1.push()

  2.shift(),移除数组中的第一项,并且返回改项。

eg:

 var colors=new Array();
var count=colors.push("red","green");
alert(count);//
count=colors.push("pink");
alert(count);//
var item=colors.shift();//red
alert(item);//red
alert(colors);//green,pink

3.相反方向的队列,即在数组的前端添加项,在末端移除项。

(1)unshift(),添加,在数组的前端添加任意个项并返回数组的长度。

(2)pop()

eg:

 var colors=new Array();
var count=colors.unshift("red","green");
alert(count);//
count=colors.unshift("pink");
alert(count);//
var item=colors.pop();//green
alert(item);//green
alert(colors);//pink,red

注意:

  IE7及更早的版本对Javascript的实现中存在偏差,其unshift()方法总是返回undefined而不是数组的新长度,IE8在非兼容模式下会返回正确的长度值。

四.重排序方法

1.reverse()方法:反转数组项的顺序。

eg:

 var values=[1,2,3,4,5];
values.reverse();
alert(values);//5,4,3,2,1

2.sort()方法:按升序排列数组项,即最小的值在最前面,最大的值在最后面,但是要注意的是:sort()方法会调用每个数组项的toString()方法转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串。

eg:

  var values=[1,2,3,4,5,10,11];
values.sort();
alert(values);//1,10,11,2,3,4,5

说明(W3C)

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

eg:

 function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1>value2){
return 1;
}else{
return 0;
}
}
var values=[1,2,3,4,5,10,11];
values.sort(compare);
alert(values);//1,2,3,4,5,10,11

  也可以通过改变比较函数的返回值,达到降序的效果:

eg:

 function compare(value1,value2){
if(value1<value2){
return 1;
}else if(value1>value2){
return -1;
}else{
return 0;
}
}
var values=[1,2,3,4,5,10,11];
values.sort(compare);
alert(values);//11,10,5,4,3,2,1

注意:

  (1)当然,如果是简单想反转原来的顺序,而不考虑升序降序的问题,使用reserve()要更快一些。

  (2)reverse()和sort()方法的返回值是经过排序后的数组。

  (3)对于数值类型或者是valueOf()方法会返回数值类型的对象模型,可以使用以下函数:

  function compare(value1.value2){
return value2-value1;
}

  由于比较函数通过返回一个小于0,等于0或是大于0的值来影响排序结果,因此减法操作就可以适当地处理这些情况。

JS高程5.引用类型(4)Array类型的各类方法的更多相关文章

  1. JS_高程5.引用类型(4)Array类型的各类方法

    一.转换方法 所有的对象都具有toLocaleString(),toString()和valueOf()方法.调用toString()方法会返回由数组中的每个值的字符串拼接而成的一个以逗号分隔的字符串 ...

  2. JS高程5.引用类型(3)Array类型-检测数组

    1. instanceof操作符(ECMAScript3) 对于一个网页,或者是一个全局作用域而言,使用instanceof操作符来检测数组就可以得到满意的结果. 语法:if(value instan ...

  3. JS高程5.引用类型(2)Array类型

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

  4. Js高程笔记->引用类型

    1 . Object 对象    2 . Array 对象 :       检测方法:ES5 : isArray       转换方法: toLocaleString , toString , val ...

  5. 《JS高程》引用类型学习笔记

    2月圆满的结束了,结束之前是如凤凰般的涅槃.一边上班,一边搞科研的忙碌有点让人透不过气,心会不由得浮躁起来.但是,无论什么事情,只要充满耐心.专心去做,总会朝好的方向发展,心态真的很重要.Anyway ...

  6. JavaScript引用类型之Array类型一

    一.简介 除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了.下面就来分析ECMAScript中的数组与其他语言中的数组的异同性: 1.相同点: (1)他们都是数据的有序列 ...

  7. JavaScript引用类型之Array类型API详解

    Array类型也是ECMASCRIPT中最常见的数据类型,而且数据的每一项可以保存任何类型的数值,而且数组的大小是可以动态调整的,可以随着数据的添加自动增长以容纳新的数据.下面,总结数据的一些常用方法 ...

  8. 引用类型之Array类型

    Array类型 ECMAScript数组与其它语言数组一样,都是数据的有序列表.但是ECMAScript数组的每一项可以保存任何类型的数据.而且,ECMAScript数组是可以动态调整的. 1.创建和 ...

  9. JavaScript之引用类型(Array类型)

    除了Object类型,Array是ECMAScript中最常用的类型了. 与其他语言不同的是,ECMAScript数组的每一项可以保存任何类型的数据. 而且,ECMAScript数组的大小是可以动态调 ...

随机推荐

  1. hibernate-mapping-3.0.dtd;hibernate-configuration-3.0.dtd;hibernate.properties所在路径

    hibernate-mapping-3.0.dtd 所在路径:hibernate-release-5.2.5.Final\project\hibernate-core\src\main\resourc ...

  2. C#中实现并发的几种方法的性能测试

    C#中实现并发的几种方法的性能测试 0x00 起因 去年写的一个程序因为需要在局域网发送消息支持一些命令和简单数据的传输,所以写了一个C/S的通信模块.当时的做法很简单,服务端等待链接,有用户接入后开 ...

  3. 快速开发Grunt插件----压缩js模板

    前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...

  4. 使用CSS3的box-shadow实现双透明遮罩层对话框

    box-shadow介绍 在我之前的一篇文章<从天猫和支付宝身上学习opcity与rgba>中,介绍了实现双透明遮罩层效果的两种方法,分别是opacity和rgba.他们需要分别依赖于不同 ...

  5. [MongoDB] 32Bit构建上文件大小限制问题

    一. 问题概述 今天看看爬虫抓取的数据,发现数据无法插入,首先想到的就是32Bit构建的文件大小限制问题,检查一下还真的是.本文把整个检查问题,解决问题的过程记录下来. 问题:     "s ...

  6. iOS 开发不可缺少的工具

    1.截屏利器:Snip 强大的滚动截屏功能,你值得拥有! Snip.png 传送门:http://www.snip.qq.com/ 2.Mac上最好的终端模拟器:iTerm2 iTeam.png 传送 ...

  7. AngularJS过滤器filter-时间日期格式-渲染日期格式-$filter

    今天遇到了这些问题索性就 写篇文章吧 话不多说直接上栗子 不管任何是HTML格式还是JS格式必须要在  controller 里面写 // new Date() 获取当前时间 yyyy-MM-ddd ...

  8. Linux Hadoop2.7.3 安装(单机模式) 一

    Linux Hadoop2.7.3 安装(单机模式) 一 Linux Hadoop2.7.3 安装(单机模式) 二 java环境安装 http://www.cnblogs.com/zeze/p/590 ...

  9. BootStrap_04之jQuery插件(导航、轮播)、以及Less

    1.列偏移与列排序: ①列偏移:控制列出现的位置,某列偏移后,后序列会随之偏移--只能右偏移: col-lg/md/sm/xs-offset-*; ②列排序:控制某一列的位置,该列可以左(pull)右 ...

  10. 基于DotNetOpenAuth的OAuth实现示例代码: 获取access token

    1. 场景 根据OAuth 2.0规范,该场景发生于下面的流程图中的(D)(E)节点,根据已经得到的authorization code获取access token. 2. 实现环境 DotNetOp ...