Подтвердить что ты не робот

"Невозможно удалить свойство" в Safari при попытке удалить атрибут набора данных в строгом режиме

Рассмотрим следующий код:

(function () {
  'use strict';
  delete document.body.dataset.state;
})();

где тело dataset пусто. Safari обрабатывает все значения DOMStringMap - ну, я думаю, так - как ReadOnly, а их значения enumerable, configurable и writable для дескрипторов установлены на false. Это приводит к появлению TypeError: Unable to delete property в приведенном выше примере.

Но в значениях дескриптора свойств набора данных Chrome значение true (может быть проверено с помощью Object.getOwnPropertyDescriptor()), а удаление не существующего атрибута не выдает ошибки.

Итак, какое поведение верно? Спектр говорит о readonly dataset, но записываемый DOMStringMap, поэтому я предполагаю, что свойства набора данных должны быть удалены. Я что-то пропустил?

4b9b3361

Ответ 1

Вероятно, из-за строгой моды.

В-третьих, строгий режим делает попытки удалить отказоустойчивые свойства throw (где перед попыткой просто не было никакого эффекта):

'use strict';
delete Object.prototype; // throws a TypeError

Вы можете посмотреть эту документацию

Также вы можете попробовать установить значение объекта undefined, его немного волосатое, но работает.