今天同事给了我一段代码问我返回是什么,被整蒙了
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,我们可以看一下
- 关键就是这个c,这个c用了扩展运算符,所以传进来的数组c多余的元素都会给参数c,所以参数c就变成了一个数组[3,4],我们可以看看
我们知道了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被同事真实了