如何将vexing'for'循环转换为'Object.keys'例程或类似(JSLint)

时间:2016-02-04 00:43:31

标签: javascript jquery for-loop foreach jslint

我正在尝试遵循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循环,如何执行此操作的任何线索?

1 个答案:

答案 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;”相比是可行的。环;有人在意推测?