object equivalence in arrays

by kevincollins

HTML

<pre id="out"></pre>

JavaScript

var a1 = [{
  i: 0,
  s: 'zero'
}, {
  i: 1,
  s: 'one'
}];

var a2 = [
  a1[0],
  a1[1]
];

// items point to same reference
print(a1[0] === a2[0]); // true (equivalent)

// updating one affects both
a1[0].s += ' updated';
print(a1[0] === a2[0]); // true (still equivalent)
print(a1[0]); // {"i":0,"s":"zero updated"}
print(a2[0]); // {"i":0,"s":"zero updated"}

// however, deleting one does not affect the other
delete a1[0];
print(a1[0]); // undefined
print(a2[0]); // {"i": 0, "s": "zero"}

function print(obj) {
  document.querySelector('#out').innerHTML += "<p>" + JSON.stringify(obj) + "</p>"
}