在什么条件下Array.observe的"添加"事件会触发?

Sea*_*son 10 javascript arrays

我正在学习观察Array对象.我发现以下令人惊讶:

var fooArray = [];
Array.observe(fooArray, function(changes){
    console.log('changes:', changes[0].type);
});
fooArray.push({});
Run Code Online (Sandbox Code Playgroud)

导致变化的类型splice与否add

哪种方法会导致类型的更改事件add?在我看来,推动单一价值将是最可能的情况.

Luc*_*iva 7

MDN基准不明确什么情况下开火各更改类型.这是一个详细的解释:

拼接

涵盖您期望在阵列中发生的每个更改.以下所有功能都会触发它:

  • push()
  • pop()
  • shift()
  • unshift()
  • splice()

更新

如果某个元素的值发生更改,则触发:

var arr = ['a', 'b', 'c'];
Array.observe(arr, function (changes) {
    console.dir(changes);
});
arr[0] = 'A'; // triggers 'update'
Run Code Online (Sandbox Code Playgroud)

值得一提的是,某些数组函数也可能触发它,比如reverse().

添加| 删除

尽管看起来不直观,但在向数组添加/删除属性时会触发这些类型.例如:

var arr = ['a', 'b', 'c'];
Array.observe(arr, function (changes) {
    console.dir(changes);
});
arr.foo = 'bar'; // triggers 'add'
delete arr.foo;  // triggers 'delete'
Run Code Online (Sandbox Code Playgroud)

PS:看杰克的回答,说明为什么会这样.