Ответ 1
Оператор delete
по-прежнему разрешен в строгом режиме, но некоторые его использование ошибочно. Это разрешено только для свойств объекта, а не простых имен и только для свойств объекта, которые можно удалить.
Таким образом,
var a = {x: 0};
delete a.x;
отлично, но
delete Object.prototype;
нет, и ни одно из них не является
delete a;
(Последняя фактически является ошибкой на уровне синтаксиса, в то время как попытка удалить свойство undeletable является ошибкой во время выполнения.)