不懂就问,对数组操作时,返回所有真值用 testArray.map(Boolean) 是什么写法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
Bechbaliq

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

  •  
  •   Bechbaliq 2021 年 8 月 24 日 2182 次点击
    这是一个创建于 1704 天前的主题,其中的信息可能已经有所发展或是发生改变。
    没懂为啥括号里 Boolean 是怎么来的,是什么的简写还是其他语法特性,能不能给个出处
    14 条回复    2021-08-25 10:35:59 +08:00
    1sm23
        1
    1sm23  
       2021 年 8 月 24 日
    不应该是 Array.prototype.filter 吗
    momocraft
        2
    momocraft  
       2021 年 8 月 24 日   1
    Boolean 是一个函数 你在 repl 里执行一次就知道了
    Puteulanus
        3
    Puteulanus  
       2021 年 8 月 24 日   1
    就是 new Boolean() 那个 Boolean 吧
    zhw2590582
        4
    zhw2590582  
       2021 年 8 月 24 日   1
    [0, '', false, null, NaN].filter(Boolean)

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

    [0, '', false, null, NaN].filter(item => Boolean(item))
    clf
        5
    clf  
       2021 年 8 月 24 日   1
    supuwoerc
        6
    supuwoerc  
       2021 年 8 月 24 日   1
    这句话的意思是过滤虚值,我经常这样处理,类似的还可以
    ```
    aray.map(Number)
    array.map(String)
    ```
    Boolean,String 都是一个包装函数,传入 map 就是指定 map 处理逻辑。
    Leviathann
        7
    Leviathann  
       2021 年 8 月 24 日 via iPhone
    一个 object 的 get 方法有没有简写
    类似 Java 的方法引用 xxxMap::get 那种
    Bechbaliq
        8
    Bechbaliq  
    OP
       2021 年 8 月 24 日
    明白了,换成这种写法我就懂了:
    var x = [0, 1, 0, 0].map(positive);
    var positive = (x) => new Boolean(x);

    map 里的 positive 是一个函数,可以直接替换成 Boolean.
    DICK23
        9
    DICK23  
       2021 年 8 月 24 日   1
    Boolean 就是个构造函数,蕾丝与 i => !!i
    shyling
        10
    shyling  
       2021 年 8 月 24 日   1
    Boolean 是个函数
    Wanex
        11
    Wanex  
       2021 年 8 月 24 日   1
    Boolean 是一个函数,map 会将遍历的元素逐个传进这个函数
    mxT52CRuqR6o5
        12
    mxT52CRuqR6o5  
       2021 年 8 月 24 日   1
    @Bechbaliq
    Boolean(x)和 new Boolean(x)不一样
    Bechbaliq
        13
    Bechbaliq  
    OP
       2021 年 8 月 24 日 via Android
    @mxT52CRuqR6o5 嗯嗯,上面那个 MDN 文档提到了,感谢指出
    libook
        14
    libook  
       2021 年 8 月 25 日   3
    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 函数,转换成布尔型数值,然后把结果组成一个新数组。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     923 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 161ms UTC 22:36 PVG 06:36 LAX 15:36 JFK 18:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86