I think this can just be `isNaN(value)`, no need for `+`. also you probably want `+value <= 0`, no?

style nit: this line is indented too much.

I think this would be clearer if you have a boolean `shouldRemove` variable up here and then switch on attribute/property below. in particular, you can combine the hasSideEffects logic for properties.