如何检测一个数组被相同的其他数组替换?

时间:2018-09-10 11:02:14

标签: javascript arrays debugging

在我的代码中,我有一个包含数组的变量。我想调试该变量的操作。我不介意数组的内容是否正在更改,但是我必须查看数组本身更改的频率和时间。

一个例子:

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"]

即使旧数组和新数组的内容相同,如何检测存储在变量中的数组也已更改?

2 个答案:

答案 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'];

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty

答案 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不是实际的副本,只是对相同内存对象的引用。