#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
Подробнее тут
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Проблема в том, что я изучаю Java Script по мануалам и статьям, самостоятельноИспользую пока его просто для того, чтобы сделать тривиальные задачи
Есть приложение в ангуляре, которое использует GSAP анимациюОно меняет svg с помощью timeline, а точнее, Есть один svg и внутри него много и они анимируются...