记笔记很有必要——相信我,大多数人的记忆力是不可靠的。
——《与时间做朋友》李笑来
数组
值的有序集合
-
弱类型
-
数组中的元素可以是各种类型的
null
undefined
...
-
-
空间有限
0~2^32-1( 42_9496_7295)
创建
字面量
var arr = [['ff',{ee:'dd'}],[e,dd]]
var arr = [,,] //2 undefined
new Array()
new Array(100);//100undefined
new Array(1,2,'hi',{'touch':'me'})//[1,2,'hi',{touch:'me'}]
添改查删
添加
-
.push(xx)
//添加到后面返回添加后数组的数组长度
//等于
arr[arr.length] = xx
.unshift()
//添加到前面
删除+输出
-
(单纯删除)
arr.length -= 1;
//删除最后一元素
.shift()
//把第一个牺牲出去.pop()
//把最后一个牺牲出去
delete
delete arr[0] // 相当于 arr[0] = undefined
迭代
for(;;)
略
for(i in arr)
-
作为一个对象来遍历这个数组时
-
当Array原型上定义了一个属性的时候,
for i in arr
一个数组的时候,将会把原型上的这个属性也遍历出来,不管这个数组是在这之前还是之后生成的。var arr = [1,2,3] Array.prototype.x = 'inherited' for(i in arr){ console.log(i + ' ' + arr[i]); } //1 1 //2 2 //3 3 //x 'inherited'
-
解决方式
for(i in arr){ if(arr.hasOwnProperty(i){ //do somethings } }
-
-
遍历的顺序不确定
因为对象不是有序的。
-
数组的两种特殊形式
二维数组
遍历一个二位数组
通过嵌套的循环
var arr = [[0,1],[1,2],[2,3]]
for(var i =0;i<arr.length;i++){
console.log('row ' + i)
for(var j =0;j<arr[i].length;j++){
console.log(arr[i][j]);
}
}
应用
二位平面定位
三位空间点定位(使用三维数组
稀疏数组(不常用)
内部的元素构不成一个连续序列
一般length属性值比实际元素个数大
什么东西?
将数组比作一栋出租屋,里面按照输入的参数建了好几个房间。
除了部分建造时就不打算用来出租的空房间之外
如果存在没有人住的空房间
那么这个出租屋就是“稀疏出租屋”。
//按照输入的参数建了好几个房间
var apartment = [1,undefined,,4,'watch']
// 建造时就不打算用来出租的空房间
apartment[1]
// undefined
1 in apartment
// true
// 没有人住的空房间
aprtment[2]
// undefined
2 in apartment
// false
// 稀疏出租屋
apartment;
// [1,undefined,,4,'watch']
怎么产生的?
这个空房间的产生可能由于:
建房子的时候输入的参数没有指明用途。
var empty = [,,]
出租过程中赶走了某些房客。
delete arr[1]
具体来说就是说: 存在某个空间没有元素的数组便是稀疏数组
怎么处理?
-
in
{number} in {arr}
将会确认arr[number]
这个位置有没有元素存在。
-
arr[i] == undefined
同检查元素是否存在
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。