将函数的参数转换为类似数组的对象

时间:2013-07-25 18:40:31

标签: javascript function prototype bind slice

有人告诉我,将'arguments'对象设为true数组以及创建现有数组的副本是有用的。但是,是否有必要转换为类似数组的对象?这样做有什么好处?

function toArray(obj) {
    return Array.prototype.slice.call(obj);
}

function bind(scope, fn) {
    return function() {
         // why not just return fn.apply(scope, arguments);  ?
         return fn.apply(scope, toArray(arguments));
    };
}

我知道'arguments'对象的好处是它包含'length'属性,所以我们可以转换为类似数组的对象,但是当我通过传入像

这样的对象来测试它时
x = { 
     'a': 'a', 
     'tt': 'tt', 
     '2':'2', 
      length:3 
};

toArray(x); // [undefined x 2, 2]

它返回一个包含undefined元素的数组,是不是因为它们的键不是数字?

1 个答案:

答案 0 :(得分:0)

如果你做了:

x={1:1,2:1,0:55,length:3};
toArray(x);

// result [55, 1, 1]

数组会指望键是数字。 所以看看0 ...未定义 看看1 ...未定义 看看2 ...' 2'

所以是的,因为他们的密钥不是数字。

希望这会有所帮助