for(var ss of document.styleSheets){
for(var cssrule of ss.cssRules){continue;}}
document.styleSheets属于StyleSheetList类型,它有一个[Symbol.iterator],因此它是可迭代的。它由许多CSSStyleSheet对象填充,这些对象具有指向CSSRuleList的cssRules属性,该CSSRuleList具有[Symbol.iterator],因此它也应该是可迭代的。
理论上代码应该可以工作,但它会抛出错误(“ss.cssRules不可迭代”),这种行为是否打算?
答案 0 :(得分:1)
发生错误是因为cssRules可能是null
或undefined
因此无法迭代,因此在内部for of
之前添加空检查。
for(var ss of document.styleSheets){
if(ss.cssRules){
for(var cssrule of ss.cssRules){
continue;
}
}
}
答案 1 :(得分:0)
由于this bug而在打字稿中出现(不幸的是尚未修复),我被迫使用以下解决方案
for(let ssIdx=0; ssIdx < document.styleSheets.length; ssIdx++) {
let ss = document.styleSheets[ssIdx];
for(let cssrule of [...ss.cssRules] ) {
continue;
}
}