javascript高级程序设计笔记4

from:javascript高级程序设计笔记(四)


day 04


 引用类型



Object类型
 1,创建Object的方式有两种:
  (一)使用new操作符后跟Object构造函数,如下:


  1. var person = new Object();  
  2. person.name = "Nico";  
  3. person.age = "82";  
   (二)使用对象字面量表示法

  1. var person = {  
  2.    name:"nico",  
  3.    age:82  
  4. };  
 在使用对象字面量语法时,属性名也可以使用字符串。如下:

  1. var person = {  
  2.      "name":"Nico",  
  3.      "age":82,  
  4.         5:true  
  5. };  
另使用对象字面量语法时,如果留空花括号,则可以定义只包含默认属性和方法的对象。如下:

  1. var person = {};    //同new  Object()相同,不会调用Object构造函数(ff 2及之前版本会调用)                       
  2. person.name = "Nico";  
  3. person.age = 82;  

Arrray类型
创建数组的基本方式有两种
 (一)一种是使用Array构造函数,如下:
var colors = new Array();
如果知道数组要保存的项目数量,也可以给构造函数传递该数量。使用时可以省略new 操作符,结果相同。
 (二)使用数组字面量表示法。由一对包含数组项的方括号表示,多个数组项之间以逗号隔开,如下:

  1. var colors = ["red","blue","green"];//创建一个包含3个字符的字符串的数组                                    
  2. var names = []; //创建一个空数组  
  3. var values = [1,2];//不要这样,会创建一个包含2或3项的数组  

与对象一样,在使用数组字面量表示法时,也不会调用Array构造函数(ff3及更早版本除外)。

栈方法
ECMAScript为数组专门提供了push()和pop()方法,以便实现类似栈的行为。push()方法可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。pop()方法从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。如下:

  1. var colors = new Array();//创建一个数组  
  2. var count = colors.push("red","blue");//推入两项  
  3. alert(count);//2  
  4.   
  5. count  = colors.push("black");//推入另一项  
  6. alert(count);//3  
  7.   
  8. var item = colors.pop();  
  9. alert(item);//"black"  
  10. alert(colors.length);//2  

队列方法
采用shift()及push()方法来实现,shift()能够移除数组中的第一个项并返回该项,同时将数组长度减1,示例如下:


  1. var colors = new Array();//创建一个数组  
  2. var count = colors.push("red","blue");//推入两项  
  3. count  = colors.push("black");//推入另一项  
  4. alert(count);//3  
  5. var item = colors.shift();//取得第一项  
  6. alert(item);//"red"  
  7. alert(colors.length);//2  

ECMAScript还为数组提供了一个unshift()方法,它能在数组前端添加任意个项并返回新数组的长度,因此,可以使用unshift()和pop()的方法从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移除项。如下:

  1. var colors = new Array();//创建一个数组  
  2. var count  = colors.unshift("red","blue");//推入两项  
  3. alert(count);//2  
  4.   
  5. count = colors.unshift("black");//推入另一项  
  6. alert(count);  
  7.   
  8. var item = colors.pop();  
  9. alert(item);  
  10. alert(colors.length);  

总结:pop()方法是从数组末尾移除并返回该移除的值,push()方法添加数据到数组末尾,并且返回修改后的长度。shift()方法移除数组第一项并返回该移除的项,unshift()方法添加数组第一项数据并返回修改后的长度。

重排序方法
1,数组中存在两个直接排序的方法 reverse()和sort(),一个反转,一个升序排列。第一个方法不够灵活。sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,比较字符串中每个字符的ASCII码的大小,字符串比较ASCII码的方式是首先比较首字符的ASCII码,如果能够区分出大小则停止比较,如果相等则继续比较下一个字符,依次类推。即使数组中的每一项都是数值,sort()方法比较的也是字符串。
如下:

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

sort()方法根据测试字符串的结果改变原来的顺序。因为数值5虽然小于10,但在进行字符串比较时,"10"则位于"5"的前面,于是就被修改了。因此,sort()可以接收一个比较函数作为参数(只能是函数,可选)。参数函数一般会有两个参数,用于传递数组中的元素,并用于排序规则操作,如果返回值大于零,则两个值互换,否则不互换。以下是个简单的比较函数:

  1. function compare(value1,value2){  
  2.     if(value1 < value2)  
  3. {  
  4.     return -1;  
  5. }else if(value1 > value2)  
  6. {  
  7.     return 1;  
  8. }else{  
  9.     return 0;  
  10. }  
  11. }  

对于数值类型或者 valueOf()方法返回数值类型的对象类型,可以使用简单的比较函数。如下:

  1. function compare(value1,value2)//升序  
  2. {  
  3.     return value2 - value1;  
  4. }