我知道它用于使参数成为一个真正的数组,但我不明白使用时会发生什么 Array.prototype.slice.call(arguments)
以前回答的问题说这是最快的方式:
//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) 我正在阅读这个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) 我想使用forEach方法迭代NodeList,我搜索了该方法,我发现解决方法是将NodeList转换为数组:
var nodesArray = Array.prototype.slice.call(nodeList);
nodesArray.forEach(function(node) {
//...
})
Run Code Online (Sandbox Code Playgroud)
但我不明白为什么我们使用这种Array.prototype.slice
方法?
我在JQuery中有几行代码:
var central = $('#townid option:contains("Central")');
if (central.length){
central.insertAfter('select option:first-child');
}
Run Code Online (Sandbox Code Playgroud)
如何在不使用JavaScript的情况下使用JQuery库重写它?
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