《重构》、《js高级程序设计》一些笔记知识点

《重构(第2版) : 改善既有代码的设计》

1. 函数命名:以它“做什么”来命名,而不是以它“怎么做”来命名。

  •  一个改进函数名字的好方法:先写一句注释描述这个函数的用途,再把这句注释变成函数的名字;

2. 每当看见一段代码在同时处理两件不同的事,我就想把它拆分成各自独立的模块,因为这样到了需要修改的时候,我就可以单独处理每个主题,而不必同时在脑子里考虑两个不同的主题。

  • 最简洁的拆分方法之一,就是把一大段行为分成顺序执行的两个阶段。
  • 你常能见到一些身兼多职的循环,它们一次做了两三件事,不为别的, 就因为这样可以只循环一次。但如果你在一次循环中做了两件不同的事,那么每当需要修改循环时,你都得同时理解这两件事情。

3. 分解条件表达式

  • 在带有复杂条件逻辑的函数中,代码(包括检查条件分支的代码和真正实现功能的代码)会告诉我发生的事,但常常让我弄不清楚为什么会发生这样的事。
  • 对于条件逻辑,将每个分支条件分解成新函数还可以突出条件逻辑,更清楚地表明每个分支的作用,并且突出每个分支的原因。

4. 将查询函数和修改函数分离。

《JavaScript高级程序设计:第2版》

1. 检测类型

  • 检测基础数据类型 typeof :String, Number, Boolean, undefined (typeof ss)
  • 检测引用类型 instanceof : person instanceof Array/Object/RegExp(引用类型 instanceof Object 会始终返回 true,基本类型 instanceof Object 会始终返回 false)
  • 避免和 null 比较。改为 typeof / instanceof;如果是希望对象包含某个特定的方法名,则使用 typeof 确保指定名字的方法存在于对象上。
  • 代码中的null比较越少,就越容易确定代码的目的,并消除不必要的错误。

2. 访问变量属性

  • 点表示法:只可以使用字符串 person.name
  • 方括号语法:可以使用变量 let ss=name; person[ss]
  • 通常,除非必须使用变量来访问属性,否则我们建议使用点表示法。

3. 所有对象都有 toLocaleString(), toString(), valueOf() 方法。

4. 重排序方法: reverse(), sort()

  • 默认情况下,sort() 按照升序排列数组项。sort() 会调用每个数组项的 toString() 方法,然后比较得到的字符串并排序,即使数组中的每一项都是数值,sort() 比较的也是字符串。
  • 因此 sort() 可以接收一个函数作为参数,以便我们指定哪个值排在前面。

5. 在 javascript 中,没有任何代码是立刻执行的,但一旦进程空闲则尽快执行。

  • 如设定一个150ms后执行的定时器不代表150ms后代码立即执行,它表示代码会在150ms后被加入到队列中。如果这个时间点上,队列中没有其它东西,那么这段代码就会被执行,表面上看上去好像代码就在精确指定的时间点上执行了。其它情况下,代码可能明显地等待更长时间才执行。

6. 函数节流背后的基本思想是指:某些代码不可以在没有间断的情况连续重复执行。

  • 函数节流在 resize 中最常用。

7. 变量和函数命名

  • 变量名应为名词,如 car, person。
  • 函数名应该以动词开头,如 getName()。 返回布尔类型的函数一般以 is 开头,如 isEnable()。
  • 变量和函数都应该使用合乎逻辑的名字,不要担心长度,长度问题可以通过后处理和雅俗来缓解。

8. 原生的方法比较快:只要有可能,使用原生方法而不是自己重写一个。(原生方法是c/c++写的,比js的快很多。

9. switch 语句较快:还可以通过将case语句按照出现概率从大到小来进一步优化 switch 语句。

10. 位运算符比较快: 可以选择性地用位运算代替算术运算,如取模、逻辑与、逻辑或等。

11. map(), filter(), some(), every(), forEach() 都可以让数组的处理变得更简单。

12. 解构赋值: 当一个对象字面量出现在等号左边时,就认为它是一个解构赋值。

  • var [name, value] = ["color","red"];//一次给2个变量赋值
  • var value1 = 5; var value2 = 10; [value1, value2] = [value2,value1];//交换两个变量的值
posted @ 2022-12-05 10:51  sunshine233  阅读(42)  评论(0编辑  收藏  举报