Maybe my comment was misleading - the important part is the property read, not the `console.log`. The following code might be an infinite loop in JavaScript:
function adder(arr, obj) {
for (var i = 0; i < arr.length; ++i) {
obj.x += i;
}
}
var arr = [1];
var obj = Object.defineProperties({}, {
x: {
get: function() { return 1; },
set: function(v) { arr.push(v); }
}
};
adder(arr, obj);
Unless you can specifically measure caching the length is faster, I wouldn't do it. Most of the time it doesn't matter anyway (won't cause a bump in performance), and even then most of the time the compiler will be able to figure it out for you.