js 七种方法实现把 arguments 转为数组
文章原文:https://www.cnblogs.com/yalong/p/14293732.html
代码如下,注意事项以及说明都在写在代码注释里了:
// 这个是给 for in 捣乱的,for in 的潜在危险就在此
Object.prototype.name = '我是来捣乱的'
function forInToArr (arg){
let arr = []
// 直接用下面这个 for in 会把原型链上的属性也遍历了,这样输出的结果就是 [11, 22, 33, 44, '我是来捣乱的']
// for (let key in arg) {
// arr.push(arg[key])
// }
Object.keys(arg).forEach(item => {
arr.push(arg[item])
})
return arr
}
function forOfToArr (arg){
let arr = []
for (let value of arg) {
arr.push(value)
}
return arr
}
function test () {
console.log('下面这个是arguments 原本的样子:')
console.log(arguments)
console.log(typeof arguments) // 这里输出 object 所以可以用 for of 进行遍历
console.log('下面这些是转为数组后的样子:')
// 方法一
console.log(Array.prototype.slice.call(arguments))
// 方法二
console.log([].slice.call(arguments))
// 方法三
console.log(Array.from(arguments))
// 方法四
console.log([...arguments])
// 方法五
console.log(forInToArr(arguments))
// 方法六
console.log(forOfToArr(arguments))
}
// 这个是 剩余运算符 rest
function test2 (...args) {
// 方法七
console.log(args)
}
test(11, 22, 33, 44)
test2(11, 22, 33, 44)
console 输出的结果如下