1. 首先就是Object可以用作Hash, Map,关联数组
2. Object的属性和方法
hasOwnProperty()
propertyIsEnumerable()
isPrototypeOf()
3. Array的属性和方法
首先要注意Array[index]中的index不会做任何trunction这种操作,什么意思呢,看下面的代码
var arr = [0,1,2,3]; //!arr["1.23"] = 1.23; document.write("arr[1] is " + arr[1] + "<br>"); document.write("arr[1.23] is " + arr[1.23] + "<br>"); arr[10] = 10; document.write("arr is " + arr + "<br>");
输出的结果是:
arr[1] is 1
arr[1.23] is undefined
arr is 0,1,2,3,,,,,,,10
其次,要注意Array的length属性是可写的。也就是你可以改变它。看下面的代码:
var arr = [1,2,3]; undefined arr; [1, 2, 3] arr.length = 5; 5 arr; [1, 2, 3, undefined, undefined] arr.length = 1; 1 arr; [1]
Array的方法
1. join() 可以带一个分隔符,默认是","。不会改变数组
2. reverse() 反转数组,直接改变数组
3. sort() 排序,默认以字典顺序排序,改变数组
var arr2 = [-1, -100, 2, 35]; undefined arr2.sort(); [-1, -100, 2, 35] arr2; [-1, -100, 2, 35] arr2.sort(function(a,b){return a - b;}); [-100, -1, 2, 35] arr2 [-100, -1, 2, 35]
这个对于数字来说非常的不方便:(
4. concat 连接操作。不改变数组,返回拼接好的数组
var arr = [1,2,3,4]; undefined arr.concat(4,[5,[6,7]]); [1, 2, 3, 4, 4, 5, [6, 7]] arr; [1, 2, 3, 4]
第一层的子数组会被展开,但是再深度的就不会了。这点让人觉得蛮困惑的,为什么这么设计呢?
5. slice(a, b) 返回[a, b)的部分,不改变数组
var arr = [1,2,3,4,5]; undefined arr.slice(-3,-1); [3, 4] arr; [1, 2, 3, 4, 5]
6. splice(a, length, addOne, addTwo ...)
这个函数,首先删除[a, a+1, a+length-1],然后再加上addOne, addTwo。改变数组
var a = [1,2,3,4,5]; a.splice(2,0,'a','b'); // Returns []; a is [1,2,'a','b',3,4,5] a.splice(2,2,[1,2],3); // Returns ['a','b']; a is [1,2,[1,2],3,3,4,5]
7. push, pop, unshift, shift 改变数组
这些函数都蛮正常的理解,首先它会返回值,无论是push, unshift还是pop和shift,都会。push,unshift是返回数组的长度,pop和shift是返回那个被pop或者shift的值。还需要注意,如果一次unshift很多值,值是一次进去的,所以顺序和你在参数列表里一致(不需要理解这句话,看下面的例子就知道)
var arr = [1,2,3,4,5]; undefined arr.push(6); 6 arr.pop(); 6 arr.push(6,7,8); 8 arr.pop(); 8 arr; [1, 2, 3, 4, 5, 6, 7] arr.unshift(0); 8 arr; [0, 1, 2, 3, 4, 5, 6, 7] arr.shift(); 0 arr; [1, 2, 3, 4, 5, 6, 7] arr.unshift(-3,-2,-1,0); 11 arr; [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7] arr.shift(); -3 arr; [-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]
8 toString(), 不会改变数组。注意下面的例子:
arr; [1, 2, 3, [4, 5, [6, 7]]] arr.toString(); "1,2,3,4,5,6,7" arr.join(); "1,2,3,4,5,6,7"
数组全部展开了。