Недавно я работал над вариантом использования, когда у меня был объект, как показано ниже.

let obj1 = {
 name: "Dr Strange",
 stone: "Time",
 status: "alive"
}

Здесь API был разработан таким образом, что нам нужно было отправлять stone только тогда, когда status было Time. Также по какой-то причине мне был предоставлен входной объект в указанном выше формате.

Я хотел отредактировать вышеуказанный объект и просто полностью удалить stone property, если status !== 'active'. Итак, что я делаю, это

//incorrect way
if(obj1.status !== 'active')
 obj1.stone= undefined;

Один из моих друзей сказал мне, что это кажется неправильным, так как я пытался удалить свойство, установив для него значение undefined . Поэтому я спросил о правильном способе, но он не мог придумать другого способа, который сделал бы это лучше. Я использовал этот путь и продвинулся вперед в то время.

Недавно я наткнулся на ключевое слово delete в JavaScript, о котором раньше не знал. Я также понял, что когда мы устанавливаем для какого-либо свойства значение undefined, мы на самом деле не удаляем это свойство.

Вот пример тому доказательство. Теперь, когда мы console.log вышеуказанный объект

console.log(obj1) // {name: "Vision", stone: "Time", alive: undefined}

Таким образом, свойство alive не определено, но все еще присутствует в объекте. Итак, правильный способ сделать это:

let obj1 = {
 name: "Dr Strange",
 stone: "Time",
 alive: true
}
delete obj1.alive;
obj1 // {name: "Vision", stone: "Soul"}

Итак, теперь свойство полностью удалено из объекта вместо того, чтобы иметь значение undefined. Это не только удаляет свойство из объекта, но и экономит память, удаляя его ссылку.

Но не беспокойтесь о докторе Стрэндже, он прячется где-то в прошлом, так что вполне может прийти спасти Мстителей в «Финале игры».