请考虑以下代码:
(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,但是writable DOMStringMap,所以我假设数据集属性必须是可删除的。我错过了什么吗?
答案 0 :(得分:1)
可能是因为严格模式。
第三,严格模式尝试删除不可删除的属性 throw(在尝试之前的地方根本没有效果):
'use strict';
delete Object.prototype; // throws a TypeError
您可能需要查看this documentation
你也可以尝试将对象值设置为undefined,它有点毛茸茸但是有效..