1. 1. 前言
  2. 2. 摘录
    1. 2.1. 基本语法
    2. 2.2. 数据类型和变量
    3. 2.3. 字符串
    4. 2.4. 数组
    5. 2.5. 循环

前言

最近又再从头看廖雪峰的 JavaScript 教程,之前就看过,但是当时就是当做普通的一个教程来看的。后来学 promise 的时候,以及学 python 的时候,在 google 里搜出来好多的内容都是廖雪峰这个网站上的。所以就又详细看了 python 的教程,和 promise 的内容。觉得写的都挺好的,然后就又看了关于继承这些的内容,发现很多原来理解的东西,再看过一遍之后还会有新的理解。所以决定现在在重新看一遍这个教程。因此就有了这篇读书笔记。把一些我认为的金句摘录下来,并写上我的理解和感触。

摘录

  1. JavaScript本身对嵌套的层级没有限制,但是过多的嵌套无疑会大大增加看懂代码的难度。遇到这种情况,需要把部分代码抽出来,作为函数来调用,这样可以减少代码的复杂度。

这段话其实说明了函数的另外一个作用,就是函数除了可以复用,减少重复代码量之外,还有一个功能,就是封装接口,实现编程的语义化,或者说降低编程的嵌套深度,增强代码的可读性。因此以后要注意,对于一些比较复杂的代码,可以考虑封装一部分成为函数,然后通过调用函数实现。

JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。

注意,undefined 仅仅在判断函数参数是否传递的情况下有用

如果有很多变量需要连接,用+号就比较麻烦。ES6新增了一种模板字符串,表示方法和上面的多行字符串一样,但是它会自动替换字符串中的变量:

注意,以后要尽可能多的使用模板字符串来代替使用 + 实现字符串的拼接。

需要特别注意的是,字符串是不可变的,如果对字符串的某个索引赋值,不会有任何错误,但是,也没有任何效果:

var s = "Test";
s[0] = "X";
alert(s); // "Test"

这里和 python 很像,字符串是不可以改变的。

JavaScript为字符串提供了一些常用方法,注意,调用这些方法本身不会改变原有字符串的内容,而是返回一个新字符串:toUpperCase(), toLowerCase(), indexOf(), subString()

请注意,concat()方法并没有修改当前Array,而是返回了一个新的Array。

实际上,concat()方法可以接收任意个元素和Array,并且自动把Array拆开,然后全部添加到新的Array里:

注意这里的 concat 方法,是不是通过递归的方式,然后再遍历进行 concat 可以实现 flatten 一个多维数组呢?这是一个思考题,先放在这里,回头再来研究。

JavaScript的循环有两种,一种是for循环,通过初始条件、结束条件和递增条件来循环执行语句块:

注意这里,所有的循环都是有起始条件,然后递增条件和终止条件的。从这个角度去设计和理解循环,起始更容易设计出你想要的条件。