方法的长度是形参的长度,并且如果形参被指定默认值的话,就失去一个长度,比如function(a=1,b,c)那么这个长度就是2,而不是3

发布时间 2023-11-15 23:37:45作者: 龙陌

以下哪些表达式的值为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)