Вы неправильно поняли, что возвращает delete:
Выдает строгий режим, если свойство является собственным неконфигурируемым свойством (возвращает false в нестрочном режиме). Возвращает true во всех остальных случаях. ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete )
blockquote>
delete ch.a
пытается найти свойствоa
вch
, не удается (посколькуch
не имеет такого собственного свойства ), ничего не делает и счастливо возвращаетtrue
. Если вы написалиdelete ch.foobar
, результат будет таким же. Если, однако, вы попробовали неконфигурируемое свойство (например,delete ch.__proto__
), результатом будетfalse
.