function f(a,b,c){ console.log(a,b,c);} f.apply(null,{0:123,1:456,2:789,length:2});//123 456 undefined ,因为 length 属性值为2,值只传入了 2 个参数 f.apply(null,{10:123,11:456,12:789,length:3});// undefined undefined undefined , 因为参数对象不存在以 0、1、2 为 key 的值
var nodes = document.getElementsByTagName("div"); var obj = {0:1,1:2,2:3,length:3}; var args = Array.prototype.slice.apply(nodes,[0]); //error,"Array.prototype.slice: 'this' 不是 JavaScript 对象",节点集合无法调用数组原型的方法 var args = Array.prototype.slice.apply(obj,[0]); //ok var args = Array.prototype.concat.apply([],nodes); //ok var args = Array.prototype.concat.apply([],obj); //error,"Function.prototype.apply: 缺少 Array 或 arguments 对象",普通对象无法用于 apply 传参
var nodes = document.getElementsByTagName("div"); var obj = {0:1,1:2,2:3,length:3}; var params = nodes;//try nodes and obj try{ var args = Array.prototype.slice.apply(params ,[0]); }catch(err){ var args = Array.prototype.concat.apply([],params); } console.log(args);
var args = Array.apply([],params);//应使用,Array.prototype.concat.apply([],params) var obj = {0:3,length:1}; var args = Array.apply([],obj); //在 obj[0] 符合数组 length 取值范围时,将得到长度为3 的空数组而不是 [3],这种情况比较容易疏忽 args.length ;//3 ( obj[0]<Math.pow(2,32)-1)
function f(a,b){ var args = [].concat.apply(arguments,[111,222,333]); console.log(args); console.log(args.length); console.log(args[0]); } f("x","y") //执行结果 //[Arguments[2], 111, 222, 333] //4 //["x", "y"]
阅读:231
评论:0
゛. - 看過世间最冷漠滴眼神, 爱過⒈生最无缘滴人﹎
该页面还没有任何评论,赶快占个沙发吧!