日期:2014-05-16  浏览次数:20364 次

《javascript高级程序设计》学习笔记第5章

引用类型

? ? 引用类型的值是引用类型的一个实例。引用类型是一种数据结构。用于将数据和功能组织在一起。

?

5.1 Object类型

功能:在应用程序中存储和传输数据

创建Object的2种方式:

  1. new操作符后跟Object构造函数。
var person = new Object();
person.name = "flyer";
person.age = 26;

? ?2. ? 使用对象字面量表示法

?

/*
* 在对象字面量中使用逗号来分隔不同的属性,最后一个属性后不能加逗号,会在ie和opera中报错
*属性名也可以使用字符串
*/
var person ={
       name : "flyer",
       age : 26
};

?

?对象字面量语法更优,要求的代码量少,给人封装数据的感觉!对象字面量也是向函数传递大量可选参数的首选方式

function displayInfo(args) {
            var output = "";
        
            if (typeof args.name == "string"){
                output += "Name: " + args.name + "\n";
            }
        
            if (typeof args.age == "number") {
                output += "Age: " + args.age + "\n";
            }
        
            alert(output);
        }
        
        displayInfo({ 
            name: "Nicholas", 
            age: 29
        });
        
        displayInfo({
            name: "Greg"
        });

?

5.2 Array类型

ECMAScript数组的每一项可以保存任何类型的数据。

?

创建数组的2种方式:

? ?1. 使用Array构造函数

??

var colors = new Array();
/*也可给构造函数传递数量*/
var colors = new Array(10);
/*也可给构造函数传递数量应该包含的项*/
var colors = new Array("red","blue","green");

?

? ? 2. 使用数字字面量表示法

/*数字字面量由一对包含数组项的方括号表示,多个之间用逗号分隔。*/

var colors = ["red","blue","green"];
/*数组的length属性不是只读的。设置这个属性,可以从数组末尾移除项或向数组中添加新项*/

colors.length = 2;
alert(colors[2]); //undefined
5.2.1转换方法

?toString(),toLocaleString(),valueOf()方法。

其中调用数组的方法toString()和valueOf()方法会返回相同的值。

?

var colors = ["red","blue","green"];
alert(colors.toString());
alert(colors.valueOf());
alert(colors);  //后台调用toString()方法
?toLocaleString()除了会返回上面两个方法外,也会创建一个数组值的以逗号分隔的字符串。区别是:调用的每一项是toLocaleString()方法,而不是toString()。

?

?join()方法可以使用不同的分隔符来构建字符串,join 方法重现了toString()的输出。

?

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

?

5.2.2栈方法

数组可以像栈一样,栈是一种LIFO(last-in-first-out后进先出)的数据结构,最新添加的项最早被移除。可以限制插入和删除项的数据结构。

数组的插入或移除只发现在栈的顶部。

a)???????? push() 添加到数组的末尾

?

b)???????? pop() 从数组末尾移除最后一项,然后返回移除的项

?

5.2.3队列方法

队列是一种FIFO(first-in-first-out先进先出)的数据结构。

? shift() 移除数组中的第一个项并返回该项

?

? unshift() 能在数组前端添加任意个项并返回新数组的长度

?

5.2.4重排序方法

? ?reverse() 反转数组项的顺序(不够灵活)

?

? ?sort() 默认按升序排列数组项-即最小的值在最前面,会调用toString()转型方法。也可以接受一个比较函数做为参数

var values = [0,1,5,16,4];
       values.sort();
       alert(values);  //0,1,16,4,5

?

?

5.2.5操作方法

? ? 1) concat()方法可以基于当前数组中的所有项创建一个新数组。(创建当前数组副本,将接受到的参数添加到副本的未尾,返回新构建的数组。)如果传递的是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中。如果传递的值不是数组,这些值添加到结果的末尾。

?

? ? 2)slice()

? ? ? ? ??二个参数slice(a,b)指返回项的起始和结束的位置之间的项(不包括结束位置的项)。

? ? ? ? ? 一个参数slice(a)返回从该参数指定位置开始到当前数组末尾的所有项。

?

? ?3)splice()方法用于删除、插入或替换数组的元素。?

? ? 语法? ?arrayObject.splice(index,howmany,element1,.....,elementX)?
参数 描述?
index?必需。规定从何处添加/删除元素。 ?开始插入和(或)删除的数组元素的下标,必须是数字。?
howmany?必需。规定应该删除多少元素。必须是数字,可以是 0。?如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。?
element1 可选。规定要添加到数组的新元素。从 index 所指的下标处开始插入。?
elementX 可选。可向数组添加若干元素。?
返回值?

如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。?
说明?
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的