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?在我看来,推动单一价值将是最可能的情况.
该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:看杰克的回答,说明为什么会这样.