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 函数,转换成布尔型数值,然后把结果组成一个新数组。