在我的代码中,我有一个包含数组的变量。我想调试该变量的操作。我不介意数组的内容是否正在更改,但是我必须查看数组本身更改的频率和时间。
一个例子:
window.myarray = []
console.log(window.myarray); // outputs: []
window.myarray.push("bla"); // an irrelevant manipulation
console.log(window.myarray); // outputs: ["bla"]
window.myarray = ["bla"]; // a change of the array's identity!
console.log(window.myarray); // still outputs: ["bla"]
即使旧数组和新数组的内容相同,如何检测存储在变量中的数组也已更改?
答案 0 :(得分:5)
您可以使用代理
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy
或者您可以在窗口上定义属性
(function() {
let _myArray;
Object.defineProperty(window, "myArray", {
set(value) {
_myArray = value;
console.log('changed', value);
},
get() {
return _myArray
}
})
}())
window.myArray = [];
window.myArray = ['bar'];
答案 1 :(得分:3)
您可以这样检查身份:
window.myarray = []
var backup = window.myarray;
window.myarray.push("bla"); // an irrelevant manipulation
console.log(backup === window.myarray); // true
window.myarray = ["bla"]; // a change of the array's identity!
console.log(backup === window.myarray); // false
请注意,backup
不是实际的副本,只是对相同内存对象的引用。