Calling a property getter can have side effects, so if you serialize an object with a getter you have to be very cautious to make sure nothing weird happens underneath you during serialization.

People have exploited this sort of side effect to get bug bounties before via type confusion attacks, iirc.

Right, I get how you could make something that would cause issues. I'm curious why you would want to? :D

It usually happens by accident. For example, let's say you have a class Person with two data members named firstName and lastName. We're already in trouble, but let's make it worse: It has a getter named fullName which returns $`{this.firstName} {this.lastName}`.

That getter looks inoffensive and will, depending on your requirements, work just fine. But it has side effects because the string interpolation allocates and could trigger a garbage collection.

Note that if you're using modern JS 'class' blocks a 'get x ()' will be ignored by JSON.stringify, so if you're aiming to reproduce this you have to use old-school Object.defineProperty instead.

I don't view that as a side effect? That is, computed fields are not necessarily side effects, are they? I was thinking more like objects that keep track of how many times they were accessed. (This pattern was discussed recently for python dicts.)

I'm sure there are plenty of other similar uses that I just don't know about.

That said, if this is really included computed fields, that seems far broader.