首页 > 试题广场 >

以下哪些表达式的值为0?

[不定项选择题]
以下哪些表达式的值为0?
  • (()=>{}).length
  • 1 & 2
  • +[]
  • [1,2,-3].reduce((a, b) => a - b, 0)
  1. (()=>{}).length; 获取方法形参个数,形参为0
  2. 1=0001 2=0010  按位与运算,同为1才为1,否则返回0
  3. +[] 隐式类型转换,因为[]是对象,所以toPrimitive->valueOf->toString'',结果就是+''===0
  4. reduce对数组中的每个元素执行一个reducer函数(升序执行),将其结果汇总为单个返回值。a为累计器累计回调的返回值,b为数组的每一项元素,传入初始值0->0-(1)->(-1)-2->(-3)-(-3)->0
发表于 2019-08-16 16:52:36 回复(6)
主要说一下D选项,考的是数组的reduce函数。reduce接受2个参数,回调函数和初始值。在[1,2,-3].reduce((a,b)=>a-b,0)中,回调函数为(a,b)=>a-b,初始值为0,那么进行回调的过程如下:

回调次数
previousValue
currentValue
currentIndex
array
返回
第一次回调
0(设置的初始值)
1
0
[1,2,-3]
-1
第二次回调
-1 2 1 [1,2,-3]
-3
第三次回调
-3 -3 2 [1,2,-3]
0



编辑于 2020-02-23 21:28:18 回复(6)

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)

发表于 2022-01-20 11:42:22 回复(2)
方法的长度即为方法参数的长度
发表于 2020-08-04 15:22:20 回复(4)
第四题的,reduce()方法,0是作为起始值,0-1-2-(-3)=0
发表于 2020-09-20 19:41:37 回复(0)
1&2 &:位运算符 比较两个数字的二进制的数位,相等为1,否则为0 1=0001 2=0010 AND=0000 转换为数字结果为0
发表于 2019-08-16 15:12:22 回复(1)
A. 函数的length属性可以返回参数的数量
B. &表示按位与,&&才是逻辑运算
C. 涉及隐形转换,按照ToPrimitive规则,先valueOf返回本体比较,不行然后再调用toString,返回内容的字符串,最后转换为number类型(+号就会强制转换为number类型)
D. reduce是一种迭代,有两个参数,第一个参数是一个函数,函数中有四个形参,依次是:前一次迭代值,当前迭代元素值,当前迭代元素索引(可选),当前元素所属对象(可选)。第二个参数,设置一个值,用于初始化,第一个参数,函数的第一个形参。每次return结果,都会作为下一次迭代的初始值,reduce()函数整体返回的是最后一次迭代的值。
编辑于 2021-09-21 11:26:07 回复(0)
+[]感觉是因为那个+号,让[]想进行数***算,所以隐式类型转换成number,结果就变成了0,于是+0就等于0;
> -、+、==都会让[]隐式类型转换成number,变成false。
发表于 2021-06-04 16:54:59 回复(0)
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
发表于 2019-08-30 02:34:45 回复(0)
对象(包括数组)会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。
①为了将值转换为相应的基本类型值,抽象操作 ToPrimitive会首先(通过内部操作 DefaultValue)检查该值是否有valueOf()方法。
②如果有并且返回基本类型值,就使用该值进行强制类型转换。如果没有就使用 toString()的返回值(如果存在)来进行强制类型转换。
    {} 的 valueOf 结果为 {} ,toString 的结果为 "[object Object]"
    [] 的 valueOf 结果为 [] ,toString 的结果为 ""
如果 valueOf()和 toString()均不返回基本类型值,会产生 TypeError错误。

比如+[ ]为0
+号用于将参数作为数字返回,所以toPrimitive->valueOf->toString为"",结果就是+""===0
比如+new Array(15)为NaN 
这里相当于对于一个未赋值但是长度为15的数组进行number类型转化,其结果为NaN


发表于 2022-07-12 15:50:40 回复(1)
转换
发表于 2020-06-19 21:12:07 回复(0)

+[ ]隐式转换,[ ] --> 0

因为typeof(+[ ]) => number

typeof(1+[ ]) => string

typeof(“1” + [ ]) => string



发表于 2020-03-07 00:30:25 回复(0)
reduce相当于汇总
发表于 2021-08-27 13:53:33 回复(0)
运算符
发表于 2020-07-29 19:13:21 回复(0)
+[]看起来很迷,但是1+[]就清楚了,[]隐式转换成0
发表于 2019-12-21 14:28:46 回复(4)
reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
let 结果=数组.reduce(累加器,初始化)
//累加器
(累加结果,当前值,当前索引)=>{
  return 处理结果
}
发表于 2022-08-23 14:56:02 回复(0)
牛客75024471号:方法的长度即为方法参数的长度
发表于 2022-05-01 11:35:53 回复(0)
var fn = (a,b,c)=>{
}
fn.length;//3形参的个数
发表于 2022-03-30 14:52:34 回复(0)
有没有大神解释一下a选项呀
发表于 2021-01-26 11:32:21 回复(1)