文章原文: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 輸出的結果如下