数组的空元素empty与undefined的区别

  1. 数组的空元素 empty 表示空位,它不是一种数据类型,而是由于人为修改 arr.length 或者写入时多写了逗号造成的。
1
2
3
4
5
var arr = [1, 2, 3, 4, , , 5];
arr.length; // 7

arr.length = 10;
arr; // [1, 2, 3, 4, empty × 2, 5, empty × 3]
  1. undefined 是一种数据类型,在数组中表示这个位置的值未定义,但它仍然指向某个内存地址,这个内存地址指向的是 undefined。
1
2
var arr = [1, 2, 3, undefined, 4, 5];
arr.length; // 6
  1. empty 和 undefined 在操作数组时的主要区别在于:

使用数组的 forEach() 方法遍历时会自动忽略空位,而使用 for 循环则会将 empty 转换为 undefined 并遍历。