日期:2014-05-16 浏览次数:20394 次
在javascript中,提供了一些内置对象。Object就是其中一个,他是所有javascript对象的父对象。另外还有其他的一些。
基本上,内置对象可以分成三组:
Object是所有javascript对象的父对象。创建一个空对象你可以使用大括号方式或者构造函数方式。下面的两种是等效的:
var o = {}; var o = new Object();?
一个空对象并不是完全没有用的,他其实已经包含了一些方法和属性,比如:
o.constructor属性返回构造器函数
o.toString()方法返回一个字符串形式的对象的描述,当一个对象被用作string来使用的是,这个方法会被执行,比如alert的时候。
o.valueOf()方法返回一个对象的单值,通常是对象自己,比如:
o.valueOf() === o; // true
Array()是一个内置函数,我们可以用它来作为创建数组的构造器。下面两种是等效的:
var a = new Array(); var a = [];?
当使用Array()创建数组时,我们可以传入参数作为数组的元素。
var a = new Array(1,2,3,'four'); a; // [1, 2, 3, "four"]?
特殊的是,当我们只传入一个数字的时候。构造器会把这个数字作为数组的长度来创建一个数组。
var a2 = new Array(5); a2; // [undefined, undefined, undefined, undefined, undefined]?
下面我们可以比较一下数组和对象。
var a = [], o = {};?
在数组中,有一个length属性,而对象没有;
a.length; // 0 typeof o.length; // "undefined"?
我们可以向数组和对象中添加数字或者非数字属性。
a[0] = 1; o[0] = 1; a.prop = 2; o.prop = 2;?
但是数组中的length属性只会计算数字属性的长度。
a.length; // 1?
length这个属性我们是可以手动设置的。
如果我们设置一个比当前大的一个数字,那么数组会开辟一些空的元素来填充数组,值为undefined。
a.length = 5; a; // [1, undefined, undefined, undefined, undefined]?
如果把length设为比当前小的数字,数组将会把多余的元素截断。
a.length = 2; a; // [1, undefined]
?
Array里面还包含了其他一些有用的方法,比如sort(), join(), slice()。
我们可以试一些方法。
var a = [3, 5, 1, 7, 'test'];?
push()方法和pop()方法在对栈操作时比较有用。
push方法可以把一个元素加在数组的最后面,pop方法会删除最后一个元素。所以a.push('new')相当于a[a.length]='new',而a.pop()相当于a.length--。
push方法返回加入新元素以后的数组的长度,pop方法返回删除掉的元素。
a.push('new'); // 6 a; // [3, 5, 1, 7, "test", "new"] a.pop(); // "new" a; // [3, 5, 1, 7, "test"]?
sort()方法可以对一个数组进行自然排序,并返回排序后的数组。
var b = a.sort(); b; // [1, 3, 5, 7, "test"] a; // [1, 3, 5, 7, "test"]?
可见,a,b指向了同一个数组。
join()返回一个用给定值把各个数组元素连接起来的字符串。
a.join(' : '); // "1 : 3 : 5 : 7 : test"?
slice()方法返回一个数组指定范围的一个拷贝数组,意思就是拷贝出数组的一个范围内元素,而不改变数组本身。
b = a.slice(1, 3); // [3, 5] b = a.slice(0, 1); // [1] b = a.slice(0, 2); // [1, 3] a; // [1, 3, 5, 7, "test"]?
splice()方法会修改原数组,它会删掉指定部分的元素,并可以用新的元素来填补这些空缺。前两个参数表示起始位置和终止位置,其他的参数表示用于填补的新元素。
b = a.splice(1, 2, 100, 101, 102); // [3, 5] a; // [1, 100, 101, 102, 7, "test"]?
也可以不加填补的新元素。
a.splice(1, 3); // [100, 101, 102] a; // [1, 7, "test"]
另一种创建方法的方式是使用内置对象Function。但是这种方式不建议使用。
以下是几种创建方法的方式:
function sum(a, b) {return a + b;}; sum(1, 2); // 3 var sum = function(a, b) {return a + b;}; sum(1, 2); // 3 var sum = new Function('a', 'b', 'return a + b;'); sum(1, 2); // 3?
当使用Function()构造一个函数时,首先需要传入函数的参数,然后传入函数体的源代码。Javascript引擎会评估传入的源代码,并生成一个新的方法返回。所以,使用这种方式和使用eval()函数有着同样的缺点。
如何使用Function构造器来构造一个含有很多参数的方法时,可以将参数用逗号隔开,一次性传入。
var first = new Function('a, b, c, d', 'return arguments;'); first(1,2,3,4); // [1, 2, 3, 4] var second = new Function('a, b, c', 'd', 'return arguments;'); second(1,2,3,4); // [1, 2, 3, 4] var third = new Function('a', 'b', 'c', 'd', 'return arguments;'); third(1,2,3,4); // [1, 2, 3, 4]?
像其他对象一样,Function有co