I just found out the hard way objects are passed by reference in Javascript, for example:
for(var layer = 0; layer < hudLayers['layers'].length; layer++){
// Store the to-be-calculated values in this object
var tempValues = hudLayers['layers'][layer];
tempValues['name'] = 'test';
}
This will change the value in tempValues and hudLayers. (Seems kind of obvious, but a post without a bit of code seems so naked.)
Is there a quick way around this?
This is not an example of passing by reference (you aren't passing any parameters). However, you're correct; assigning an object will not make a deep copy.
You can make a deep copy of an object like this:
function deepCopy(obj) {
if (typeof obj !== "object") return obj;
if (obj.constructor === RegExp) return obj;
var retVal = new obj.constructor();
for (var key in obj) {
if (!obj.hasOwnProperty(key)) continue;
retVal[key] = deepCopy(obj[key]);
}
return retVal;
}
Note that if an object's constructor has any side-effects, this code will trigger them.