自学的教程
阮一峰老师的JavaScript标准参考教程:https://wangdoc.com/javascript/
1. 不推荐for····in来遍历数组
for…in不仅会遍历数组所有的数字键,还会遍历非数字键,所以不推荐使用。数组的遍历可以考虑使用for循环或while循环。
2. 数组的空位
1)当数组的某个位置是空元素,即两个逗号之间没有任何值,我们称该数组存在空位(hole)。
var a = [1, , 1];
a.length // 3
上面代码表明,数组的空位不影响length属性。
需要注意的是,如果最后一个元素后面有逗号,并不会产生空位.
2)数组的空位是可以读取的,返回undefined。
var a = [, , ,];
a[1] // undefined
3)使用delete命令删除一个数组成员,会形成空位,并且不会影响length属性。
var a = [1, 2, 3];
delete a[1];
a[1] // undefined
a.length // 3
上面代码用delete命令删除了数组的第二个元素,这个位置就形成了空位,但是对length属性没有影响。也就是说,length属性不过滤空位。所以,使用length属性进行数组遍历,一定要非常小心。
4)数组的某个位置是空位,与某个位置是undefined,是不一样的。如果是空位,使用数组的forEach方法、for…in结构、以及Object.keys方法进行遍历,空位都会被跳过。
如果某个位置是undefined,遍历的时候就不会被跳过。
就是说,空位就是数组没有这个元素,所以不会被遍历到,而undefined则表示数组有这个元素,值是undefined,所以遍历不会跳过。