Оператор delete
удаляет свойство из объекта. Если я устанавливаю свойство на window
, я могу его удалить:
window.myProp = 10;
delete window.myProp;
Как статья, я так часто ссылаюсь на другие, когда дело доходит до поведения состояний оператора delete
, это связано с тем, что присвоение свойств не устанавливает атрибут DontDelete
(в отличие от объявления переменной).
В этой статье также указано следующее (выделено мной):
Обратите внимание, что во время создания свойства атрибуты (т.е. нет). Поздние задания не изменяют атрибуты существующего свойства. Важно понять это различие.
Помня об этом, почему я могу переопределить существующее свойство окна, alert
, а затем удалить его, чтобы вернуться к исходному значению? Мне что-то не хватает? Я редко использую оператор delete
, чтобы это могло случиться.
Например:
window.alert = function() {};
alert("Hi!"); //Nothing happens
delete window.alert;
alert("Hello?"); //Alerts 'Hello?'
Здесь fiddle, чтобы продемонстрировать это (только проверенный в Chome, довольно уверен, что IE не будет вести себя таким образом, но не имеет доступа на все, кроме Chrome, прямо сейчас).