不懂就问,对数组操作时,返回所有真值用 testArray.map(Boolean) 是什么写法

2021-08-24 15:36:27 +08:00
 Bechbaliq
没懂为啥括号里 Boolean 是怎么来的,是什么的简写还是其他语法特性,能不能给个出处
1637 次点击
所在节点    JavaScript
14 条回复
1sm23
2021-08-24 15:39:12 +08:00
不应该是 Array.prototype.filter 吗
momocraft
2021-08-24 15:39:23 +08:00
Boolean 是一个函数 你在 repl 里执行一次就知道了
Puteulanus
2021-08-24 15:40:58 +08:00
就是 new Boolean() 那个 Boolean 吧
zhw2590582
2021-08-24 15:43:28 +08:00
[0, '', false, null, NaN].filter(Boolean)

等价于----------------------------------------

[0, '', false, null, NaN].filter(item => Boolean(item))
clf
2021-08-24 15:46:18 +08:00
supuwoerc
2021-08-24 15:46:45 +08:00
这句话的意思是过滤虚值,我经常这样处理,类似的还可以
```
array.map(Number)
array.map(String)
```
Boolean,String 都是一个包装函数,传入 map 就是指定 map 处理逻辑。
Leviathann
2021-08-24 16:01:20 +08:00
一个 object 的 get 方法有没有简写
类似 Java 的方法引用 xxxMap::get 那种
Bechbaliq
2021-08-24 16:06:07 +08:00
明白了,换成这种写法我就懂了:
var x = [0, 1, 0, 0].map(positive);
var positive = (x) => new Boolean(x);

map 里的 positive 是一个函数,可以直接替换成 Boolean.
DICK23
2021-08-24 17:38:57 +08:00
Boolean 就是个构造函数,蕾丝与 i => !!i
shyling
2021-08-24 17:40:38 +08:00
Boolean 是个函数
Mexion
2021-08-24 17:49:32 +08:00
Boolean 是一个函数,map 会将遍历的元素逐个传进这个函数
mxT52CRuqR6o5
2021-08-24 17:53:33 +08:00
@Bechbaliq
Boolean(x)和 new Boolean(x)不一样
Bechbaliq
2021-08-24 18:32:14 +08:00
@mxT52CRuqR6o5 嗯嗯,上面那个 MDN 文档提到了,感谢指出
libook
2021-08-25 10:35:59 +08:00
JS 是弱类型语言,可以参考“鸭子类型”的理论。

你以后遇到类似的问题,可以按照如下步骤来探究:
(一)
疑问在于 map 方法的参数上,所以可以去 MDN 上看 Array.prototype.map 方法的参数是什么: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map
可以看到 map 有 2 个参数,你的例子只传了第一个参数,也就是 map 的 callback 参数,map 会往 callback 函数里传三个参数,也就是说 Boolean 函数会接收到 map 传进来的三个参数。
不要被 Boolean 这个名字迷惑到,给 map 传任何 callback 都是这样的写法,你自己写一个 funcA,也是同样的写法传给 map,如 testArray.map(funA),JS 里名称的大小写没有特殊的特性区别。
(二)
看看 Boolean 是什么,同样去 MDN 上查: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Boolean
看来 Boolean 本身是一个函数,只有一个参数,会返回一个布尔型数据。(而且文档也特意说明了,Boolean 函数和 Boolean 构造函数是两回事,特性不一样,所以换成 new Boolean 会得到不一样的结果)
(三)
所以 map 传给 Boolean 函数的三个参数中,Boolean 函数只会用到第一个,也就是 callback 数组中正在处理的当前元素。
Boolean 会将这个参数转换成一个布尔型数据返回给 map 。
(四)
回过头来看 map 的文档,看看 map 是如何处理 callback 返回的数据的,“callback 每次执行后的返回值(包括 undefined )组合起来形成一个新数组。”
那么结果就很清晰了:map 方法会把数组中的每个元素拿出来传给 Boolean 函数,转换成布尔型数值,然后把结果组成一个新数组。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/797720

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX