JavaScript中filter方法语法结构差异导致运行结果不同的问题
问题原因解析
两段代码的逻辑完全不同,核心差异是filter回调函数的返回值不一样:
- 第一段代码的回调函数,匹配条件时返回的是元素本身:
当匹配到的元素是数字0时,你返回的0在JS中属于假值,filter会直接过滤掉返回假值对应的元素,这就是测试不通过的核心原因。 - 第二段代码的回调函数,直接返回的是条件判断的布尔结果:
只要元素是数字,typeof item === 'number'就会返回布尔值true,就算是0也不会被判定为假,符合filter的过滤规则,所以能通过所有测试。
另外你代码里额外加的|| item === 0确实是多余判断,数字0的typeof返回值本身就是'number',这个条件永远不会被触发。
内容的提问来源于stack exchange,提问作者Nunchuk
相关产品推荐
相关产品推荐

