《JavaScript 语言精髓》读书笔记

文章目录

    • 语法
      • 数字
      • 字符串
      • 语句
    • 对象
    • 函数
      • 调用
    • 闭包
    • 正则表达式
    • 方法
      • Array
      • Number
      • String

语法

数字

  1. JavaScript 只有一个数字类型。它在内部被表示为 64 位的浮点数,没有分离出整数类型,所以 11.0 的值相同,这避免了短整型的溢出问题。
  2. NaN 是一个数值,它表示一个不能产生正常结果的运算结果。NaN 不等于任何值,包括它自己。我们可以用 isNaN(xxx) 检测是否是 NaN
  3. Infinity 表示所有大于 1.7976931348623157e+308 的值,可以通过 Number.MAX_VALUE 获取,没有太大的用处,知道就好,使用时尽量避免。
    测试发现,稍微比这个数大一点点,浏览器会帮我们改成这个最大值,如果大的比较多就会显示成 Infinity

字符串

  1. JavaScript 中所有的字符都是 16 位的。
  2. 'c'+'a'+'t' === 'cat' // true
  3. 字符串有属性 length ,可以获取字符串的长度。
  4. 字符串有方法 toUpperCase() 可以将字符串转换成大写,toLowerCase() 可以将字符串转换成小写。

语句

  1. JS 中,只有六种情况的值是 falsely 其他都是 truly,分别是 false null undefined '' 0 -0 NaN
  2. for in 语句可以枚举一个对象的所有属性名,包括原型上的属性,属性名出线的顺序是不确定的,我们可以通过 hasOwnProperty(variable) 来确定这个属性名是该对象的成员,还可以使用 typeof 来排除函数。
  3. 三元运算符,如果第一个运算数值为真,则产生第二个运算数的值,如果第一个运算数值为假,则产生第三个运算数的值。
  4. // TODO 运算符优先级
  5. typeof 运算符产生的值有 number string boolean undefined function object ,数组或 null 的结果是 object,这是个BUG。

对象

  1. 除了基本数据类型,其他都是对象。
    String Number Boolean Underfined Null
  2. 属性名可以是包括空字符串在内的任意字符串,属性值可以是除了 undefined 之外的任何值。
  3. 对象适用于汇集和管理数据。
  4. JS 包含一种原型链的特性,允许对象集成另一个对象的属性,正确的使用它能减少对象初始化时消耗的时间和内存。
  5. || 运算符用来填充默认值,&& 运算符用来避免错误。
let middle = stooge["middle-name"] || "unknow"
flight.equipment && flight.equipment.model
  1. 对象通过引用来传递,它们永远不会被复制。
  2. delete 运算符用来删除对象的属性,有就删除,不会涉及到原型上。
  3. 减少全局变量污染。最小化的使用全局变量的方式之一是为你的应用只创建一个唯一的全局变量:
var MYAPP = {}
MYAPP.stooge = {}
MYAPP.flight = {}
...

函数

  1. 所谓编程,就是将一组需求分解成一组函数与数据结构。我们常说的 程序 = 数据结构 + 算法
  2. JavaScript 中的函数就是对象。
  3. 每个函数对象在创建时也随配有一个 prototype 属性。它的值是一个拥有 constructor 属性且值为该函数的对象。

调用

  1. 调用一个函数会暂停当前函数的执行,传递控制权和参数给新函数。除了声明时定义的形式参数,每个函数还接收两个附加的参数: this 和 arguments 。参数 this 在面向对象编程中非常重要,它的值取决于调用的模式。
  2. 在 JavaScript 中有四种调用模式:方法调用、函数调用、构造器调用、apply 调用。
  3. 方法调用模式:函数作为对象的一个属性时,我们称之为一个方法。方法被调用的时候,this 被绑定到该对象, 可以使用 this 访问自己所属的对象,能读取对象的属性。
  4. 函数调用模式:当一个函数并非一个对象的属性时,那么它就是被当做一个函数来调用的。此时,this 被绑定到全局对象上。通过命名一个变量 that 来保留 this 的访问权限。
  5. 构造器调用函数:如果一个函数前面带上 new 来调用,那么背地里将会创建一个连接到该函数的 prototype 成员的新对象,同时 this 会被绑定到那个新对象上。一个函数创建的目的就是希望结合 new 来使用,那这个函数称为构造器函数,函数名应该大写。
  6. Apply 调用函数,就是绑定 this 的值,参数通过数组的形式传递。

闭包

  1. 作用域的好处是内部函数可以访问定义他们的外部函数的参数和变量(除了 this 和 arguments)
  2. 函数可以访问它被创建时所处的上下文环境,这个称为闭包
  3. 闭包会保留包含函数作用域,过渡使用会造成内存问题。

正则表达式

可以处理正则表达式的方法有:regexp.exec, regexp.test, string.match, string.replace, string.search, string.split

方法

Array

  1. array.concat(item…) 该方法添加数据项,形成一个新数组,包含一份array 的浅复制。
  2. array.join(separator) join 方法构造成一个字符串,默认用,连接,可以用空字符串连接,还会去掉undefined 的项,如果有大量的字符串片段需要拼接,用join 比用 + 元素运算符要快。
  3. array.pop array.push 两个方法对数组项进行 stack 操作,会改变原数组。
  4. array.reverse() 方法反转 array 里的元素的顺序,会改变原数组。
  5. array.shift array.unshift 两个方法对数组项进行队列的操作,要比 pop 慢,会改变原数组。
  6. array.slice(start, end) 浅复制,不会修改原数组。
  7. array.splice(start, deleteCount, item) 从哪里开始删除几项,用 item 替换,会修改原数组。
  8. array.sort(fn) 接收一个函数,默认数据项都是字符串,进行升序排序。

Number

  1. number.toExponential(N) 把 number 转换成指数形式的字符串,N 制定的是小数点后的位数
  2. number.tofixed(N) 把 number 转换成一个十进制数形式的字符串,N 制定的是小数点后的位数
  3. number.toPrecision(N) 把 number 转换成一个十进制数形式的字符串,可选参数控制数字的精度
  4. number.toString(radix) 把 number 转换成一个字符串,可选参数 radix 控制基数。

String

  1. string.charAt(pos) 返回 string 中 pos 位置处的字符,如果 pos 小于0或者大于等于字符串的长度string.length则会返回字符串。
  2. string.charCodeAt(pos) 返回的不是字符串,返回的是 pos 处字符的字符码位。
  3. string.concat(string…) 把其他字符串连接在一起构造一个新的字符串,直接用 + 实现。
  4. string.indexOf(searchString, pos) 从 pos 位置开始查找 searchString 返回第一次出现的位置,没有找到返回 -1,类似的还有string.search()
  5. string.lastIndexOf(searchString, pos) 从后往前找
  6. string.match(reg) 如果是全局搜索,则返回匹配的数组
  7. string.replace(searchValue, replaceValue) 查找和替换,返回新的字符串
  8. string.slice(start, end) 复制string的一部分,start开始,end-1结束,构造一个新的字符串。
  9. string.split(sep, limit) 用来分割成片段,创建一个字符串数组,sep 是分割的字符串或者正则, limit 可选参数。
  10. string.toLowerCase() 转化成小写
  11. string.toUpperCase() 转化成大写

END.

你可能感兴趣的:(读书笔记,读书笔记)