标签:
来自某道面试题,题忘了,难点在于: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"]
标签:
原文地址:http://www.cnblogs.com/gongchengshi1803275951/p/4445760.html