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 输出的结果如下

原文地址:https://www.cnblogs.com/yalong/p/14293732.html