Leooonard / Notes

2 stars 0 forks source link

json-weight源码读后 #16

Open Leooonard opened 8 years ago

Leooonard commented 8 years ago

源码github地址

很短的一段代码, 但是还是有几个点值得记录.

  1. 展示树形层级, 这个问题会经常在项目中遇到, 特别是需要在cli中做输出的项目. 这段源码中使用的是同一层级循环, 不同层级递归深入的方法, 也就比较容易完成.
  2. ~-运算符, ~是按位运算符, 表示按位取反, 可以这么理解~x = - (x + 1), 所以~-x = x - 1, 看大神代码没点基本功还真不行...
  3. encodeUri的使用, 这里先要简单讲下, 关于字符转义, javascript中有escape, encodeUri, encodeUriComponent三个方法, 其使用场景也各不相同. 分别:

    • escape方法, 在转义内容与url无关时进行使用, 前端很少会使用到它.
    • encodeUri方法, 在转义整个url时进行使用, 它的转义范围相对encodeUriComponent较小, 比如http://就不会被转义.
    • encodeUriComponent方法, 在转义url中的参数时进行使用, 它的转义范围相对较大, 比如http://中的:和/也会被转义, 保证url的正确性.

    简单说了上述三个方法的区别后, 说下源码中的目标, 即将所有字符转化为多字节表示, utf8的字符就转换为1-4个字节, 方便进行字节数统计. 然后使用split方法按单个字节进行分割, 统计总字节数, 最后上下这句关键代码, 写的还是十分精髓的. 以后使用到的几率很大!

(~-encodeURI(string).split(/%..|./).length / 1024).toFixed(2)