#delete #undefined #array #empty
Да, есть.
Думаю, всем известно, что для удаления элемента, в JS, используется undefined:
lеt variable = 'string'
variable = undefined
Им не часто пользуются, ведь в JS работает автоматический сборщик мусора, и мало кто заботится об удалении элементов. Ещё реже встречаются люди, которые знают о существовании метода delete, а тем более те, кто замечал различия в использовании undefined и delete.
let o = {
A: 9,
B: 9,
}
delete o['A']
console.log(
Object.keys(o)//массив//["B"]//length: 1
);
Далее в моём вопросе, и следующем за ним ответе, будет рассмотрен частный, но очень важный, случай различия в использовании undefined и delete в контексте массивов.
Итак (барабанная дробь) внимание, вопрос…
В чём различия при удалении элемента массива методами undefined и delete и какие серьёзные и не очень последствия за этим следуют?
let arr = ['A','B','C','D','E','F']
delete arr[0]
arr[1] = undefined
arr[2] = void 0
Ещё реже встречаются люди, которые знают о существовании метода delete
delete - оператор, а не метод!
В чём различия при удалении элемента массива методами undefined и delete
Присвоение undefined и оператор delete не удаляют элемент массива. Они "удаляют"/устанавливают значение, содержащееся в массиве. Сам элемент массива, после такого "удаления" остается - он становится не определенным, но позволяет выполнять операции с ним (смысл термина элемент !== смыслу термина содержимое элемента. Хотя, безусловно, ==).
А различие в том, что присвоение undefined - это присвоение значения, со всеми вытекающими последствиями... тогда как delete, именно удаляет содержимое элемента.
Для удаления элементов массива, в JavaScript существует Array.splice(). Прямое назначение метода как раз в этом (и в добавлении элементов). А delete - предназначен для удаления свойств объектов.
Главное различие - что оператор delete удаляет элемент массива. Хоть при этом длинна массива не изменится и адресовать удалённый элемент вы по прежнему сможете. Но оператор in не обнаружит элемент удалённый таким способом:
let arr = ['A','B','C','D','E','F']
arr[2] = undefined
console.log(2 in arr) // ===> true
delete arr[3]
console.log(3 in arr) // ===> false
Подробнее тут
Сборка персонального компьютера от Artline: умный выбор для современных пользователей