V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lihongjie0209
V2EX  ›  问与答

这就是一个 34760 Star 的 Javascript 库该有的表现?

  •  
  •   lihongjie0209 · 2017-12-20 10:31:07 +08:00 · 10989 次点击
    这是一个创建于 2529 天前的主题,其中的信息可能已经有所发展或是发生改变。
    
    var now = moment()
    undefined
    var startOfMonth = now.startOf("month")
    undefined
    startOfMonth
    u {_isAMomentObject: true, _isUTC: false, _locale: l, _d: Fri Dec 01 2017 00:00:00 GMT+0800 (China Standard Time), _z: null}
    var endOfMonth = now.endOf("month")
    undefined
    endOfMonth
    u {_isAMomentObject: true, _isUTC: false, _locale: l, _d: Sun Dec 31 2017 23:59:59 GMT+0800 (China Standard Time), _z: null}
    startOfMonth
    u {_isAMomentObject: true, _isUTC: false, _locale: l, _d: Sun Dec 31 2017 23:59:59 GMT+0800 (China Standard Time), _z: null}
    now
    u {_isAMomentObject: true, _isUTC: false, _locale: l, _d: Sun Dec 31 2017 23:59:59 GMT+0800 (China Standard Time), _z: null}
    
    第 1 条附言  ·  2017-12-20 12:53:00 +08:00
    统一回复一下:
    首先: 函数对外接口应该满足 CQS
    其次: 日期对象应该是不可变的, 参考 Java8 新的时间 API
    最后: 看不懂 CQS 别瞎回复
    第 2 条附言  ·  2017-12-20 13:17:34 +08:00
    第 3 条附言  ·  2017-12-20 13:27:57 +08:00
    维护者博客中提到关于时间对象不可变是团队的共识, 但是由于历史遗留原因无法做出改变.
    [Why Moment.js Isn ’ t Immutable Yet]( https://maggiepint.com/2016/06/24/why-moment-js-isnt-immutable-yet/)

    > Now, it is important to know that all of Moment ’ s maintainers agree that date and time types should be immutable. If we were sitting down and writing a new date and time library today, that is how we would make it. However, changing Moment to be an immutable API has some very big logistical concerns for us.
    第 4 条附言  ·  2017-12-20 20:48:38 +08:00
    声明: 我没有喷 moment, 一个第三方库而已, 可以换另一个.
    我喷的是 js, 是 js 的生态圈, 3 万多 star 的一个开源项目怎么会发展成这样!
    108 条回复    2018-04-27 17:00:06 +08:00
    1  2  
    CodingPuppy
        101
    CodingPuppy  
       2017-12-21 10:29:18 +08:00
    @movistar 感谢指正错误,中英符号混着用也不太符合您学得新华字典。
    shunia
        102
    shunia  
       2017-12-21 10:30:21 +08:00
    luxon 的作者强调了目前还是个人副业吧,虽然会全力支持.
    我觉得楼主过分强调了多少人 star 怎么怎么滴,实际上这里有个核心问题是,moment 只是一个第三方库.这里的第三方是重点.它不是一个 js/nodejs 官方维护的项目,也不是一个 apache 之类的非盈利组织的相当于官方的库,更不是一个盈利组织开发并且售卖的库.
    大家的 star 是打给它的优秀的部分,而不是缺陷和问题.在它之前没有更好用的库而已.

    当然不得不承认,前面十几楼喷的有点太尴尬,关键是大部分人连这是为什么(即便用 2 楼的方法去描述这个问题)都不懂就开喷了.
    fds
        103
    fds  
       2017-12-21 10:40:48 +08:00   ❤️ 1
    可以理解楼主的想法,不过 js 社区就是这样,比不了 java。
    js 里面很多函数都是 mutable 的,特别是对象。所以一般都要看文档确认。
    毕竟 js 就是能解决问题就行,先写成 let startOfMonth = moment(now).startOf("month") 呗。
    FrankFang128
        104
    FrankFang128  
       2017-12-21 11:50:41 +08:00
    @k9982874 'a' in window 返回什么? JS 里 in 开头的当然应该返回 bool,从没听说过返回 index
    $.inArray 应该改名为 $.indexInArray 才对
    wxsm
        105
    wxsm  
       2017-12-21 23:48:51 +08:00 via iPhone   ❤️ 1
    作为前端开发者之一,我十分赞同楼主的观点。moment.js 火是有历史因素的,目前它已经开始因为种种设计缺陷引退了。

    那些帖子没看明白就开喷的,我不知道是什么心态。前端圈子浮躁,可谓名不虚传。
    huijiewei
        106
    huijiewei  
       2018-04-21 17:19:53 +08:00
    开源的好处在哪里?不满意可以提 pr 啊。
    lihongjie0209
        107
    lihongjie0209  
    OP
       2018-04-21 18:47:15 +08:00
    @huijiewei #106 官方都放弃了, 我就不凑热闹了. 我的论点一直是: 一个 30000 多 start 的项目会有这种致命性的问题并且还有人用, 只能说很失望
    iamkun
        108
    iamkun  
       2018-04-27 17:00:06 +08:00
    @lihongjie0209 Day.js 了解一下 2KB immutable 时间库 和 Moment.js 一样的 API
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3432 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:33 · PVG 18:33 · LAX 02:33 · JFK 05:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.