javascript - 关于HyperDown的JS代码的一些疑问

 打杂大叔_868 发布于 2022-11-10 23:15

自己的个人网站需要一个markdown编辑器,就决定把HyperDown的代码拉下来改改。
因为自己并不会CoffeeScript,就直接阅读转换出来的JavaScript代码了,但自己对JS并不很熟悉,看到一些奇怪的写法,想知道这些是有特殊意义的,还是CoffeeScript生成的冗余代码:

  1. 841行: lines = lines.slice(0); 其中lines是一个数组,请问这句话是否有意义?

  2. 863行: if (!!matches){...} matches是可能为null的数组,这里可否去掉两个感叹号?

  3. CoffeeScript支持参数默认值的写法,转换出来的JS代码会变成if(x==null) x=default_var;,感觉语义上很奇怪,能否改成去判断if(x===undefined)

  4. 转换出来的JS代码中,在很多不必要的地方使用了call(),请问call()相对于常规的写法,会影响性能么?

  5. HyperDown有一个JS版和一个PHP版,分别用于前端和后端的解析,但我觉得同时维护两个版本非常麻烦,后端解析可以通过nodejs直接使用JS版来完成,请问HyperDown这样的做法是出于什么考虑?(也许是考虑到虚拟主机不能使用nodejs?)

1 个回答
  • 1. lines = lines.slice(0)

    slice 是返回指定数组指定位置的元素组成的新数组,详情参阅 MDN 上的 Array.prototype.slice()

    2. if (!!matches){...}

    !! 只是显式的把 matches 转换为 boolean 类型,就这里的语义上来说,去掉没有影响。

    3. 默认值写法

    x == null 包含了 x === void (0)x === null 两种情况(注意等号的数量)。

    通常情况下宁愿用 typeof(x) === "undefined" 也不会直接判断 x === undefined,因为 undefined 是一个变量,可以重新定义的。void (0) 的结果是真正意义的 undefined,所以常用这个去处结果来代替 undefined

    4. call() 的性能影响

    有没有性能影响我不清楚,不过猜测应该会有一点。不过既然是从 CoffeeScript 翻译过来的,总会有一些东西并不会是最优。如果对实现运行效果没有啥影响,或者看不出来影响,就不要太在意。

    5. JS 和 PHP 两个版本的问题

    这个可能还是 SegmentFault 官方来回答比较准确。不过我猜测是因为后端使用 PHP 实现,所以用 PHP 写了一个版本,但是如果前端即时预览也通过提交到后台来处理,效率会非常低,所以又写了一套 JS 来处理。当然后来也可以通过 NodeJS 来使用 JS 库,不过估计 PHP 和 NodeJS 的配合也不是说想搞就搞的,总还是有些麻烦,所以就暂时维持成这样了。

    2022-11-12 01:54 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有