js中Array.prototype.slice.call(arguments);将伪数组转换为数组

本文介绍了如何利用Array.prototype.slice.call()方法将函数的arguments对象转换为数组。通过三种不同的方式实现了这一目标,包括直接调用slice方法并结合call函数,以及通过循环逐个添加的方式。此外,还提供了一个通用函数,用于处理不同情况下的转换需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一).Array.prototype.slice.call(arguments);

  1. slice(start, end) 方法可提取数组的某个部分,并返回新的数组
//在数组中读取元素:
var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3); // [) 左闭右开区间
citrus 结果输出:
["Orange", "Lemon"]
  1. call()函数用于调用当前函数function,并可同时使用指定对象obj作为本次执行时function函数内部的this指针引用。
var obj = {name: "wendy", age: 20};
function fun(a, b){
    console.log(this.name);    
    console.log(a);    
    console.log(b);    
}
// 改变this引用为obj,同时传递两个参数
fun.call(obj, 12, true); // 李四 12 true

var args = [].slice.call(arguments, 0);

arguments是一个对象而不是数组,最多算是一个伪数组,而且自身的原型链上也没有slice这个方法。
3. []自身也是也是一个对象.而数组原型链上有这个slice这个方法。

 /*此处的返回值是true*/
   [].slice === Array.prototype.slice;

通过call显式绑定来实现arguments变相有slice这个方法

引用hanyuntao的Array.prototype.slice.call()的分享

(二).将函数的实际参数转换成数组的方法

方法一:var args = Array.prototype.slice.call(arguments);
方法二:var args = [].slice.call(arguments, 0);
方法三

var args = []; 
for (var i = 1; i < arguments.length; i++) { 
    args.push(arguments[i]);
}

最后,附个转成数组的通用函数

var toArray = function(s){
    //try语句允许我们定义在执行时进行错误测试的代码块。
   //catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
    try{
        return Array.prototype.slice.call(s);
    } catch(e){
        var arr = [];
        for(var i = 0,len = s.length; i < len; i++){
            //arr.push(s[i]);
               arr[i] = s[i];  //据说这样比push快
        }
         return arr;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值