首页 > 编程语言 >《重构》、《js高级程序设计》一些笔记知识点

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

时间:2022-12-05 11:03:28浏览次数:43  
标签:instanceof 知识点 函数 重构 代码 js sort 执行 变量

《重构(第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];//交换两个变量的值

标签:instanceof,知识点,函数,重构,代码,js,sort,执行,变量
From: https://www.cnblogs.com/sunshine233/p/16951727.html

相关文章

  • Threejs:创建文字
    1.DOM+CSS2.将文字绘制到画布中,并将其用作Texture(纹理)如果你希望在three.js的场景中的平面上轻松地绘制文本,请使用此方法。3.在你所喜欢的3D软件里创建模型,并导......
  • js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合
    现在有一批手机,其中颜色有['白色','黑色','金色','粉红色'];内存大小有['16G','32G','64G','128G'],版本有['移动','联通','电信'],要求写一个算法,实现[['白色','16G','移动'......
  • [观点]重构代码的7个阶段
    导读:你曾去想重构一个很老的模块,但是你只看了一眼你就恶心极了。文档,奇怪的函数和类的命名,等等,整个模块就像一个带着脚镣的衣衫褴褛的人,虽然能走,但是其已经让人感到很不舒服......
  • Threejs:安装及其环境
    vue3框架安装:npminstallthree导入://方式1:导入整个three.js核心库import*asTHREEfrom'three';constscene=newTHREE.Scene(); //方式2:仅导......
  • Json字符串拼接%报异常,怎么处理
    Json字符串拼接%报异常,怎么处理错误提示:java.lang.IllegalArgumentException:URLDecoder:Illegalhexcharactersinescape(%)pattern-Forinputstring:"“}"......
  • videojs常用功能简介
    videojs常用功能简介 崔 框架和插件前端JavaScript    video.js是一款基于HTML5的网络视频播放器。它支持HTML5和Flash视频,以及YouTube和Vimeo(通过插件)。......
  • js插件---videojs的使用
    js插件---videojs的使用一、总结一句话总结:网上有各种细致的现成的代码可以拿来用,没必要自己死专1、video.js有两种初始化方式?一种是在video的html标签之中一种是使......
  • springmvc注册fastJson报错
    原因:依赖版本问题这是我原本引入的依赖,版本是1.2.24<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId......
  • JSP 2.0中函数式标签库小结
     一直十分喜欢jsp2.0的,其中自觉对jsp2.0的标签库认识不够,故学习之,在学习中,发现在标签库中,有一类可以被称为函数式标签库的标签,其功能主要是通过EL(表达式语言)对静态函数方......
  • Vue.js获取当前时间30天之前的日期
    该方法获取日期的格式为YYYY-MM-DDgetDay(day){vartoday=newDate();vartargetday_milliseconds=today.getTime()+1000*60*60*24*da......