"Невозможно удалить свойство" в 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, поэтому я предполагаю, что свойства набора данных должны быть удалены. Я что-то пропустил?
Ответы
Ответ 1
Вероятно, из-за строгой моды.
В-третьих, строгий режим делает попытки удалить отказоустойчивые свойства throw (где перед попыткой просто не было никакого эффекта):
'use strict';
delete Object.prototype; // throws a TypeError
Вы можете посмотреть эту документацию
Также вы можете попробовать установить значение объекта undefined, его немного волосатое, но работает.