ECMAScriptJS高程5.引用类型(4)Array类型的个艺术

一.转换方法

  所有的靶子还享有toLocaleString(),toString()和valueOf()方法。调用toString()方法会重返由数组中的每个值的字符串拼接而成为的一个为逗号分隔的字符串。而调用valueOf()重回的如故数组。

  

valueOf() 方法再次来到 Array 对象的原始值。

欠原始值由 Array 对象派生的持有目的继承。

valueOf() 方法一般由 JavaScript 在后台自动调用,并无显式地冒出于代码中。

注意: valueOf()方法不会晤转原数组。

 

eg:

1 var colors=["red","green","blue"];
2     alert(colors.toString());   //red","green","blue
3     alert(colors.valueOf());    //red","green","blue
4     alert(colors);              //red","green","blue
5     alert(typeof(colors.toString()));//string
6     alert(typeof(colors.valueOf())); //object
7     alert(Object.prototype.toString.call(colors.valueOf()));//[object Array]

  由方的例子可以看,调用数组的toString()方法,再次回到的是多次组的字符串形式,调用valueOf()方法重返的抑数组。这里需要注意的凡,由于alert()要吸收字符串参数,所以她会合当后台调用toString()方法,由此会博得与直接调用toString()方法同样的结果。

 

toLocaleString()方法

  toLocaleString()方法为会创一个反复组值的坐逗号分隔的字符串,与toString()和valueOf()不同的凡它为赢得各级一样码之价,调用的凡各国一样起的toLocaleString()方法,而休是toString()方法。

eg:

 1 var person1={
 2         toLocaleString:function(){
 3             return "toLocale1";
 4         },
 5         toString:function(){
 6             return "toSt1";
 7         }
 8     }
 9     var person2={
10         toLocaleString:function(){
11             return "toLocale2";
12         },
13         toString:function(){
14             return "toSt2";
15         }
16     }
17     var person=[person1,person2];
18     alert(person);                  //toSt1,toSt2,因为它调用的是toString方法。
19     alert(person.toString());       //toSt1,toSt2
20     alert(person.toLocaleString()); //toLocale1,toLocale2

 

  数组继承的toLocaleString(),toString()和valueOf()方法,在默认情形下还会面坐逗号分隔的字符串的花样重返数组项。使用join()方法,可以应用自定义之相间符来构建那多少个字符串,join()方法只有领一个参数,即用作分隔符的字符串,然后重临下频繁组项的字符串。

eg:

1  var colors=["red","green","blue"];
2     alert(colors.join(",")); //red,green,blue
3     alert(colors.join("||"));//red||green||blue
4     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:

 

1 var colors=new Array();
2     var count=colors.push("red","green");
3     alert(count);//2
4     count=colors.push("pink");
5     alert(count);//3
6     var item=colors.pop();
7     alert(item);//pink
8     alert(colors);//red,green

 

  栈方法好同此外数组方法并行使。

 

三.队排方法

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

  1.push()

  2.shift(),移除数组中的率先项,并且重回改项。

eg:

 

1 var colors=new Array();
2     var count=colors.push("red","green");
3     alert(count);//2
4     count=colors.push("pink");
5     alert(count);//3
6     var item=colors.shift();//red
7     alert(item);//red
8     alert(colors);//green,pink

 

 

 

 

 3.相反倾向的行,即当频繁组的前端添加项,在后头移除项。

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

(2)pop()

eg:

1 var colors=new Array();
2     var count=colors.unshift("red","green");
3     alert(count);//2
4     count=colors.unshift("pink");
5     alert(count);//3
6     var item=colors.pop();//green
7     alert(item);//green
8     alert(colors);//pink,red

注意:

  IE7与重新早的版本对Javascript的实现中存在错误,其unshift()方法总是重回undefined而不是一再组的新长,IE8在非兼容形式下会重返正确的长度值。

 

四.重排序方法

1.reverse()方法:反转数组项的逐一。

eg:

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

2.sort()方法:按升序排列数组项,即无限小之价在极其前面,最深的价值当最终对,可是只要专注的凡:sort()方法会调用每个数组项的toString()方法转型模式,然后相比拿到的字符串,以确定怎么着排序。尽管数组中之诸一样起都是数值,sort()方法较的也罢是字符串。

eg:

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

说明(W3C)

倘若调整用该方法时无下参数,将如约字母顺序对数组中之要素举行排序,说得再精确点,是按照字符编码的顺序举行排序。要促成这或多或少,首先应把数组的要素都换成字符串(如有必要),以便举行较。

一经想以其他专业开展排序,就得提供较函数,该函数而相比较有限只价,然后回一个用于讲明及时半个价的对峙顺序的数字。相比较函数应该有七只参数
a 和 b,其归来值如下:

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

eg:

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

  也足以因而转相比函数的归值,达到降序的功能:

eg:

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

ECMAScript 1

 

注意:

  (1)当然,假设是粗略想反转原来的次第,而休考虑升序降序的问题,使用reserve()要更快一些。

  (2)reverse()和sort()方法的重临值是因而排序后底数组。

  (3)对于数值类或者是valueOf()方法会再次回到数值类的靶子模型,可以选择以下函数:

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

  由于相比较函数通过再次回到一个小于0,等于0或是大于0的价值来影响排序结果,由此减法操作就可以适用地处理那个情况。