1.关于数组逗号和元素个数:var arr=[], arr1=[,], arr2=[,,] 长度分别为0,1,2。这里有比较奇怪的就是arr2的长度是2不是3,因为数组元素后面的逗号是可选的。
2.稀疏数组和密集数组
稀疏数组指元素不一定是从0开始的连续的索引,比如:
var arr=new Array(5);//length=5; arr[100]=100; console.log(arr.length);//length=101
console.log(99 in arr);//false
很显然,稀疏数组需要更多的内存相对于密集数组来说,当然javascript里面根据我们使用不一样,导致该数组是稀疏还是密集。这里需要注意稀疏数组在没有设置值的索引区间是没有元素的,虽然去获取arr[99]会返回undefined,但是这个跟var arr=[undefined,undefined]里面的元素是不同的。
看一个例子,可能会发现一个书籍里面的错误,应该是浏览器的javascript引擎升级所致。我在最新的IE和CHrome里面测试过
var arr=new Array(5);//length=5,还没有任何元素 var arr1=[,,,,,];// console.log(0 in arr);//false console.log(0 in arr1);//false 在《权威指南》里面这里写的是true,我这纠错下吧,实践的结果是false。
3.数组的长度length
1)如果设置length的长度小于了数组本身的长度,那么原来数组中索引在length后面的元素都会被删除。例如:
var arr = [1, 2, 3, 4, 5, 6]; arr.length = 3; console.log(arr);//1,2,3 被删除的元素4,5,6
2)当然要清空一个数组可以直接arr.length=0;数组变为[]
4.使用delete删除数组的元素,不会影响数组的长度。
var arr = [1, 2, 3, 4, 5, 6]; delete(arr[0]); console.log(arr[0]);//undefined console.log(arr.length);//6 console.log(0 in arr);//false 这应该是一个稀疏数组了吧,哈哈
5.几个数组方法:
1)reverse():反转一个数组。
2)slice和splice:slice会返回一个新的数组,不会修改原来的数组,splice会修改原数组。
3)toString():把数组中的每一个元素转成字符串,然后用逗号拼接。例如:[1,2,['c','d',['e']]].toString() -->"1,2,c,d,e"
4)toLocalString():跟toString的作用一样,是toString的本地版本,不过我确实没发现有什么不一样。
5)forEach():遍历数组;
6)Array.isArray():判断是否为数组
6.数组与类数组:类数组里面的length属性不能随着元素添加来改变,也不能设置length属性来缩小类数组,不继承Array.prototype。所以不能调用数组的方法
7.string是一种特殊的数组:Array.isArray('string')-->false,可以当作一种只读的字符数组,但是又不能使用push,pop等方法。因为string是不可变的,所以不能通过数组的方法去修改string。例如:
var str = 'hello'; str[0] = 'a'; console.log(str);//hello