尝试在严格模式下删除数据集属性时,在Safari上"无法删除属性"

eve*_*ost 10 javascript safari dom

考虑以下代码:

(function () {
  'use strict';
  delete document.body.dataset.state;
})();
Run Code Online (Sandbox Code Playgroud)

身体dataset是空的.Safari浏览器将所有DOMStringMap值-嗯,我猜是这样-因为ReadOnly,他们enumerable,configurablewritable描述符值都设置为false.这导致TypeError: Unable to delete property出现在上面提到的例子中.

但是在Chrome数据集中,属性描述符值设置为true(可以检查Object.getOwnPropertyDescriptor()),删除不存在的属性不会抛出错误.

那么,什么行为是正确的?该规范说明了readonly数据集,但可写DOMStringMap,所以我假设数据集属性必须是可删除的.我错过了什么吗?

Tam*_*taş 2

可能是因为严格模式。

第三,严格模式会尝试删除不可删除的属性(之前的尝试根本没有效果):

'use strict';
delete Object.prototype; // throws a TypeError
Run Code Online (Sandbox Code Playgroud)

您可能想看一下这个文档

您也可以尝试将对象值设置为未定义,它有点毛茸茸的,但有效。