什么是逗号操作符?
mdn解释:
对它的每个操作数求值(从左到右),并返回最后一个操作数的值。
翻译:
如(x,y),从左到右分别计算x和y,最后返回y
mdn案例:
let x = 1;
x = (x++, x);
console.log(x); // 2
是不是感觉好像这个逗号操作符没什么作用啊?存在就有意义,在一些场景还是有用的。
举个栗子:(用reduce可以实现reverse)
var arr = [1,2,3,4,5]
var result = arr.reduce((t,v)=> (t.unshift(v),t),[])
console.log(result) // [5,4,3,2,1]
reduce又是什么?
mdn解释:
reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。
还是翻译一下吧
:好吧,翻译不来,反正就是累加器的作用
reduce(func,initValue)
参数:
func:回调函数,并且有四个参数
acc
:累加器(说白了就是能拿到上一次的返回值)
cur
:当前值
idx
:当前索引
oarr
:原数组
initValue:初始值
再来看看刚刚那个栗子:
var arr = [1,2,3,4,5]
var result = arr.reduce((t,v)=> (t.unshift(v),t),[])
console.log(result) // [5,4,3,2,1]
可能会问直接这样不就好了:var result = arr.reduce((t,v)=> t.unshift(v),[])
来吧看报错:Uncaught TypeError: t.unshift is not a function
unshift方法返回的是数组的长度,那么下一次的t就是number类型而不是数组,所以会这个报错。
拆开这个写法就是:
var result = arr.reduce((t,v)=> {
t.unshift(v);
return t;
},[])
那么按照逗号操作符的运算就可以简化写法了:
var result = arr.reduce((t,v)=> (t.unshift(v),t),[])