ES6结构add([a,b,...c])

113 阅读1分钟

image.png

今天同事给了我一段代码问我返回是什么,被整蒙了

const c = [1,2,3,4]

function add([a,b,...c]){
  return a+b+c
}

console.log(add(c))

我这一看这不就是报错嘛

结果执行一下,控制台打印33,4

又一次智商被摁在地上摩擦

后来仔细看了一下,确实是这个,打脸很痛啊

步骤解析

  • 首先变量c是一个数组,所以传入add的时候就会被结构成a,b,c3个变量
  • a和b基本不用怀疑就是1,2,我们可以看一下

image.png

  • 关键就是这个c,这个c用了扩展运算符,所以传进来的数组c多余的元素都会给参数c,所以参数c就变成了一个数组[3,4],我们可以看看

image.png

我们知道了a,b,c的值再来看过程就简单了

  • a+b = 3 这个肯定是不用质疑的
  • 3+[3,4]这个等于什么

其实到了这里,就不是计算了,而是+号的拼接功能了,毕竟前后两个变量不都是数字了,所以就肯定是拼接了

既然肯定是拼接,为什么可以拼接数组,进行正确的输出,这个就是调用了toString方法,毕竟在+号运算中,只能是字符串拼接或者是数字运算,不然肯定报错

我们重写toString验证我们的猜想

Array.prototype.toString = function (){
  console.log(this);
  return 'G'
}

const c = [1,2,3,4]

function add([a,b,...c]){
  return a+b+c
}

console.log(add(c))

这里就输出成3G了

猜想正确

最后

温故而知新,o(╥﹏╥)o被同事真实了