以下哪些表达式的值为0?
A
(()=>{}).length
B
1 & 2
C
+[]
D
[1,2,-3].reduce((a, b) => a - b, 0)
正确答案:ABCD
(()=>{}).length; 获取方法形参个数,形参为0
1=0001 2=0010 按位与运算,同为1才为1,否则返回0
+[] 隐式类型转换,因为[]是对象,所以toPrimitive->valueOf->toString为'',结果就是+''===0
reduce对数组中的每个元素执行一个reducer函数(升序执行),将其结果汇总为单个返回值。a为累计器累计回调的返回值,b为数组的每一项元素,传入初始值0->0-(1)->(-1)-2->(-3)-(-3)->0
方法的长度是形参的长度,并且如果形参被指定默认值的话,就失去一个长度,比如function(a=1,b,c)那么这个长度就是2,而不是3,阮一峰的ES6讲的很清楚
=============================================
A 、(()=> {}).length 获取的是形参(注意是形参,不是实参)的个数,形参为0所以函数的length为0
如果是((a)=> {}).length,形参有一个所以函数的length为1 ;
如果是((a,b)=> {}).length,形参有两个所以函数的length为2
假如:function aaa(){}
aaa(1,2);
console.log(aaa.length) ;//值为0,因为形参个数是0,所以函数的length为0
B、&是按位与运算。同位上两者都是1才为1,否则就是0
1的二进制表示 0001
2的二进制表示 0010
1&2结果是 0000 ,转成10进制也就是0
C、+[ ] 隐式类型转换。 +会让 [ ] 隐式转换成Number,转换过程如下:
因为 [ ] 是对象,所以 toPrimitive->valueOf->toString为 '' ,Number('')得0
D、reduce( function( total, currentVal, index, arr){}, intialVal ) 方法可以看做是一个累加器。
reduce第一个参数是一个函数。函数里四个参数分别是:total、currentVal、index、arr
reduce第二个参数是函数的初始值 initialVal,初始值可填可不填
举例说明一(有初始值)
[1,2,3,4,5,6].reduce((a,b)=> a-b, 0);
//以上运行过程如下:
//a = 0, b = 1, 函数返回值val = -1 (有初始值,则a = initialVal = total = 0)
//a = -1, b = 2, val = -3
//a = -3, b = 3, val = -6
//a = -6, b = 4, val = -10
//a = -10, b = 5, val = -15
//a = -15, b = 6, val = -21 (最后函数返回值是-21)
举例说明二(无初始值):
[1,2,3,4,5,6].reduce((a,b)=> a-b);
//以上运行过程如下:
//a = 1, b = 2, 函数返回值val = -1 (无初始值,则a = 1, b =2)
//a = -1, b = 3, val = -4
//a = -4, b = 4, val = -8
//a = -8, b = 5, val = -13
//a = -13, b = 6, val = -19 (最后函数返回值是-19)