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

时间:2015-03-10 20:35:10

标签: javascript dom safari

请考虑以下代码:

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

其中正文dataset为空。 Safari将所有DOMStringMap值 - 我想是的 - 视为ReadOnly,并将其enumerableconfigurablewritable描述符值都设置为false。这会导致TypeError: Unable to delete property出现在上面提到的示例中。

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

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

1 个答案:

答案 0 :(得分:1)

可能是因为严格模式。

  

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

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

您可能需要查看this documentation

你也可以尝试将对象值设置为undefined,它有点毛茸茸但是有效..