- 数组的下标是基于0的32位整数
- 数组字面量表示法中的元素可以是表达式
- 数组[ ]下标可以是表达式
- 数组[ ]下标可以不是非负整数,相当于为函数对象添加属性,只有非负整数属性名才能引起length属性的修改
- length属性要比所有元素的下标大
- delete 不影响数组的长度
- 数组遍历需要优化,数组长度应该只查询一次
for(var i=0,len=arr.length; i<len; i++)
var a = [1,2 3]
a.concat (4,[5,[6,7]])
[1,2,"a",[3,4]].toString()
- 数组中包含undefined,在sort时会排到最后
- splice会直接修改原数组,返回删除的数组
- reverse 会直接修改原数组
- push pop shift unshift 都会修改原数组
- pop shift 会返回数组元素
- push unshift 返回数组的长度
- unshift splice 会将参数元素一次性地添加进数组,在数组中的顺序即参数本身的顺序
- es5中新增数组方法不会修改原数组
arr.es5数组方法(function(数组元素,索引,数组){},this值的指向)
- map会返回一个新数组forEach不会返回值
- some遇到返回true的元素就停止遍历every 遇到返回false 的元素就停止遍历
- filter会跳过稀疏数组中缺少的元素,用filter压缩稀疏数组
arr.filter(function(x){return true })
arr.reduce(function(操作累计的值,数组元素,索引,数组本身){},初始值)
- reduce 中使用的是化简函数,将两个值化简为一个值,并返回化简后的值
- 初始值没有指定时,会将数组中的第一个元素做为初始值
- 在空数组上调用reduce且没有指定初始值时,会报错
- 在空数组上调用reduce 且有一个初始值,或者在只有一个元素的数组上调用reduce且没有初始值时,会简单地返回这个值
sum = arr.reduce(function(x,y){return x+y},0)
product = arr.reduce(function(x,y){return x*y },1)
max = arr.reduce(function(x,y){return x>y?x:y })
- indexOf() 第二个参数指定查询的起始位置,为负值时,是相对于数组末尾
- 数组类型
- Array.isArray()
- arr instanceof Array 但是一个浏览器对象可能会有多个frame,每个frame中都有自己的全局变量和对应的构造函数,一个frame中的对象不可能是另一个frame的构造函数的实例,该判断方法会失效
- typeof arr === “object” && Object.prototype.toString.call(arr) ==="[object Array ]"
- 类数组对象
- 数组的方法可以用在类数组对象上,但是concat中的拼接结果不包括类数组对象
- 返回类数组对象的数组副本
Array.prototype.slice.call(arrlike,0)
- 字符串类似于只读数组,[ ]可以访问字符串中的字符
- 在字符串上调用修改数组的数组方法会静默地失败