相关疑难解决方法(0)

Array.prototype.slice.call()如何工作?

我知道它用于使参数成为一个真正的数组,但我不明白使用时会发生什么 Array.prototype.slice.call(arguments)

javascript prototype-programming

457
推荐指数
7
解决办法
13万
查看次数

将JavaScript NodeList转换为Array的最快方法?

以前回答的问题说这是最快的方式:

//nl is a NodeList
var arr = Array.prototype.slice.call(nl);
Run Code Online (Sandbox Code Playgroud)

在我的浏览器基准测试中,我发现它比这慢3倍:

var arr = [];
for(var i = 0, n; n = nl[i]; ++i) arr.push(n);
Run Code Online (Sandbox Code Playgroud)

它们都产生相同的输出,但我发现很难相信我的第二个版本是最快的方式,特别是因为人们在这里说了不同的.

这是我浏览器中的怪癖(Chromium 6)吗?或者有更快的方法吗?

编辑:对于任何关心的人,我选择了以下内容(这似乎是我测试的每个浏览器中最快的):

//nl is a NodeList
var l = []; // Will hold the array of Node's
for(var i = 0, ll = nl.length; i != ll; l.push(nl[i++]));
Run Code Online (Sandbox Code Playgroud)

EDIT2:我发现了一种更快的方法

// nl is the nodelist
var arr = [];
for(var i = nl.length; i--; arr.unshift(nl[i]));
Run Code Online (Sandbox Code Playgroud)

javascript arrays nodelist

241
推荐指数
10
解决办法
12万
查看次数

使用没有参数的Javascript slice()方法

我正在阅读这个jquery masking插件,试图理解它是如何工作的,并且在许多地方,作者调用slice()函数不传递任何参数.例如,这里_buffer变量是slice()d,_buffer.slice()并且_buffer似乎保持相同的值.

有没有理由这样做,或者作者只是让代码更复杂?

 //functionality fn
 function unmaskedvalue($input, skipDatepickerCheck) {
     var input = $input[0];
     if (tests && (skipDatepickerCheck === true || !$input.hasClass('hasDatepicker'))) {
         var buffer = _buffer.slice();
         checkVal(input, buffer);
         return $.map(buffer, function(element, index) {
             return isMask(index) && element != getBufferElement(_buffer.slice(), index) ? element : null; }).join('');
    }
    else {
        return input._valueGet();
    }
}
Run Code Online (Sandbox Code Playgroud)

javascript jquery

53
推荐指数
1
解决办法
2万
查看次数

使用forEach方法迭代NodeList

我想使用forEach方法迭代NodeList,我搜索了该方法,我发现解决方法是将NodeList转换为数组:

var nodesArray = Array.prototype.slice.call(nodeList);
nodesArray.forEach(function(node) { 
    //...
})
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么我们使用这种Array.prototype.slice方法?

javascript foreach nodelist slice htmlcollection

6
推荐指数
1
解决办法
2656
查看次数

如何在不使用JavaScript的情况下使用JQuery库来重写它?

我在JQuery中有几行代码:

     var central = $('#townid option:contains("Central")');
     if (central.length){
        central.insertAfter('select option:first-child');
     }
Run Code Online (Sandbox Code Playgroud)

如何在不使用JavaScript的情况下使用JQuery库重写它?

html javascript jquery css-selectors jquery-selectors

3
推荐指数
1
解决办法
170
查看次数

Javascript - forEach() 循环不适用于 IE11

forEach 循环应该在 IE11 和 diplay 中工作

对象不支持属性或方法“forEach”。

它应该可以工作,因为它是一个 ECMAScript-5 函数并且IE11 支持它

但是,我这里的代码不起作用:

var alltable = document.querySelectorAll('*[id^="table_"]'); //Select all elements with the id starting by "table_"
    alltable.forEach(function(element) {
                // Do some code
                });
Run Code Online (Sandbox Code Playgroud)

知道为什么吗?

javascript foreach internet-explorer ecmascript-5 internet-explorer-11

1
推荐指数
1
解决办法
4884
查看次数