It works recursively, so it will even detect if you modify a deep property like obj.a.b[0].c = true.