关于Array.prototype.slice.call()的问题

HTML代码:


<ol id="test-list">

    <li class="lang">Scheme</li>

    <li class="lang">JavaScript</li>

    <li class="lang">Python</li>

    <li class="lang">Ruby</li>

    <li class="lang">Haskell</li>

</ol>

控制台:


var list = document.getElementById('test-list')

var slist = list.children;

slist.sort(function(a, b){

   return a.innerHTML > b.innerHTML ? 1 : -1 ;

});

这里报错:Uncaught TypeError: slist.sort is not a function at <anonymous>:1:7 

用typeof slist测试返回是"objiect"

然后控制台输入:


slist=Array.prototype.slice.call(slist);

typeof slist;

还是返回"objiect",

但是这时控制台输入:


slist.sort(function(a, b){

   return a.innerHTML > b.innerHTML ? 1 : -1 ;

});

运行正常,没有报错.排序结果也是对的,


slist.forEach(function(el){

 list.appendChild(el);

})

运行后


<ol id="test-list">

<li class="lang">Scheme</li>

<li class="lang">JavaScript</li>

<li class="lang">Python</li>

<li class="lang">Ruby</li>

<li class="lang">Haskell</li>

</ol>

我想问一下slist=Array.prototype.slice.call(slist);这一步起到了什么作用,为什么不能直接调用sort();;进行排序?


莫回无
浏览 416回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript