有人告诉我,将'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
元素的数组,是不是因为它们的键不是数字?
答案 0 :(得分:0)
如果你做了:
x={1:1,2:1,0:55,length:3};
toArray(x);
// result [55, 1, 1]
数组会指望键是数字。 所以看看0 ...未定义 看看1 ...未定义 看看2 ...' 2'
所以是的,因为他们的密钥不是数字。
希望这会有所帮助