来自某道面试题,题忘了,难点在于:function 中的argument类数组怎么转数组
我们来看看argument是什么
function myToArray(){ console.log(arguments); console.log(arguments === Array) } myToArray(3,5,7);
Chrome下控制台
我们来看arguments并不是数组,事实上typeof(arguments)输出是一个Object
怎么这么熟悉???
我们来看JQuery下$()下返回什么
<html> <body> <div></div> <div></div> <div></div> </body> <script type="text/javascript" src="jquery-1.11.2.js"></script> <script> console.log($("div")) </script> </html>
Chrome下结果
typeof($("div"))输出是一个Object
我们可以看到,这并不是一个数组,而是一个对象
我们来怎么运用它的
var a = {0:"aaaa",1:"bbbb",2:"cccc",length:3} for(var i=0;i<a.length;i++){ console.log(a[i]) }//输出 aaaa bbbb cccc
这就是类数组
所以类数组我们可以这么转
function sArray(){ var temp_array = []; for(var i=0;i<arguments.length;i++){ temp_array.push(arguments[i]) } return temp_array; } console.log(sArray("1a","2b","3c","4d"))//["1a", "2b", "3c", "4d"]
除此之外,还有一种方法,我们来看jQuery里怎么转的
toArray: function() { return core_slice.call( this ); },
这里似乎用了个slice,还有call?
是的
首先我们知道slice是array实例的方法,
var a=[1,3,5,7]; console.log(a.slice()) //[1, 3, 5, 7] console.log(Array.slice()) //Uncaught TypeError: Array.slice is not a function console.log(Array.prototype.slice.call(a)); //[1, 3, 5, 7]var a2 = {0:"aaaa",1:"bbbb",2:"cccc",length:3};console.log(Array.prototype.slice.call(a2)); //["aaaa", "bbbb", "cccc"]
slice方法有两个参数 strar ,end不传参的时候可以传出整个数组
call方法可以改变this指向,call(a),slice方法里的this就指向了a
因此另一种转数组的方法就是
function myToArray(){ return Array.prototype.slice.call(arguments) } console.log(myToArray(1,3,5,7)) //[1, 3, 5, 7] console.log(myToArray("a","b","c","d")) //["a", "b", "c", "d"]
时间: 2024-10-07 15:55:28