我正在尝试遵循JSLint的“最佳做法”,它不鼓励for
循环,推荐Object.keys
和类似的地方。大多数for
循环可以使用Object.keys
轻松转换为forEach
,如下所示:
Object.keys(object).forEach(function (key) {
等
这是一个现实世界的例子:
var elems = document.getElementsByClassName('myClass');
Object.keys(elems).forEach(function (key) {
elems[key].style.display = 'block';
elems[key].style.visibility = 'visible';
});
但是,我对如何将以下例程转换为不使用标准for
循环的表单感到困惑。
var selection = window.getSelection();
var htmlDiv = document.createElement("div");
var i;
for (i = 0; i < selection.rangeCount; ++i) {
htmlDiv.appendChild(selection.getRangeAt(i).cloneContents());
}
我不需要迭代window.getSelection()
;我需要使用getRangeAt()
的原生window.getSelection()
函数按范围抓取文本。
如果不使用上述标准for
循环,如何执行此操作的任何线索?
答案 0 :(得分:1)
好吧,我将成为一个猴子的叔叔。被JSLint处方&#39; Object.keys&#39;误导了代替&#39;为&#39; (参见:jslint.com/help.html#for),@ guest271314建议使用简单的&#39; while&#39;循环做了伎俩并通过了JSLint的标准:
while (i < selection.rangeCount) {
htmlDiv.appendChild(selection.getRangeAt(i).cloneContents());
i += 1;
}
JSLint还坚持&#39; i + = 1;&#39;代替i++;
并提供理由(请参阅http://www.jslint.com/help.html#inc)。但是他们没有解释为什么while
循环与“&#39;”相比是可行的。环;有人在意推测?