JavaScript 'Set' 是否适用于 HTMLStyleElement 对象?

Does JavaScript 'Set' work for HTMLStyleElement objects?

在我的网站中,DOM 中有一些重复的 <Style> 元素。我正在尝试使用 JavaScript 中的 Set 对这些元素进行一些重复数据删除。生成非重复元素的代码是这样的:

const CSSCache = new Set<HTMLStyleElement>();
const styles = document.getElementsByTagName('style');
for (let i = 0; i < styles.length; i++) {
   CSSCache.add(styles[i] as HTMLStyleElement);
}

我想知道 JavaScript Set 是否能够使这些 HTMLStyleElement 对象具有唯一性。

此外,其中一些元素没有任何内容,例如<style></style> 但他们在 element.sheet.cssRules 中使用 insertRule (https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet/insertRule) 插入了规则。我想知道 Set 是否也适用于这些类型的样式。

集合包含通过 Object.is 算法唯一的值,这与 === 的工作方式几乎相同。

将页面上的 <style> 个对象分开,无论内容是否 ===,因此您将使用当前代码获得页面上所有 <style> 的集合。

同样适用于任何 HTMLElement,甚至适用于普通对象。

const set = new Set();
const obj1 = {};
const obj2 = {};
set.add(obj1);
set.add(obj2);
console.log(set.size);

如果你想de-duplicate,你将不得不走另一条路——比如遍历每个样式的规则。