读书笔记 —《JavaScript权威指南》

来源:互联网 发布:基本编程 编辑:程序博客网 时间:2024/06/05 08:17

读书笔记系列 — 《JavaScript权威指南》

这里写图片描述

传说中的犀牛书,虽然后300页是参照本但真是超厚的硬货!不少人评论就是一本字典~ 我买的是第六版,内容都是JS基础知识,因为出版日期较早所以大多参照ES3/ES5标准。会在这儿记录下自己关注的一些知识点和总结。

第2章 词法结构

  1. js程序是用Unicode字符集编写的,Unicode使ASCII和Latin-1的超集,并支持地球上几乎所有在用的语言;
  2. js大小写敏感,变量名支持以字母、_、$开头;
  3. 分号自动填补规则:
var a=3=>var a = 3;var y = x+f(a+b).toString()=>var y = x+f(a+b).toString();returntrue=>return; true;x++y=>x; ++y;

第3章 类型、值和变量

  1. js数据类型分两类:原始类型、对象类型;
  2. 原始类型:数字、字符串、布尔值、null、undefined;
  3. 如果通过new一个函数来初始化对象,这个函数被称为构造函数,被new出来的对象组成的集合被称为——类,js中常见的类:Array、Function、Date、RegExp、Error;
  4. 面向对象:对象拥有方法直接调用,而不需要在全局定义函数然后将值传入。不仅是对象,数字、字符串、布尔值也可以拥有自己的方法,只有null和undefined不能拥有方法;
    当调用s.length时,进行的操作是先new String(s)将其转换为对象,调用结束后再销毁,Number()和Boolean()类似;
  5. 所有数字用64位浮点数表示,最大值±1.7976931348623157×10308,最小值±5×10-324
    超过数字范围 ±Infinity
    能表示的整数范围:-253~253,超过此范围的整数无法保证低位数字的精度
  6. Math.round() 四舍五入
    Math.ceil() 向上取整
    Math.floor() 向下取整
  7. js采用IEEE-754浮点数表示法,这是一种二进制表示法,可以精确到分数比如1/2,1/8,1/1024,但对于十进制分数不能准确表示比如1/10,所以0.3-0.2!=0.2-0.1,在二进制64位浮点表示法中小数部分最多只有52位,0.3转换后为0.299999999999999988897769753748,0.2转换后为0.200000000000000011102230246252,计算结果是0.09999999999999998,其实在java之类的语言中也有这个问题,只是内部做了处理;
  8. 字符串方法:charAt,substring,substr,slice,splice,indexOf,lastIndexOf,toUpperCase
  9. null和undefined
    typeof(null) //object
    typeof(undefined) //undefined
    null == undefined //true
    null === undefined //false
  10. 类型转换(见表3-2)
    只有当值是NaN时,x!=x才成立

第4章 表达式和运算符

  1. 运算符优先级(见表4-1)
    属性访问和函数调用优先级比表4-1中所有运算符都高,例如typeof my.functions[x](y),是先执行属性访问和函数调用后才执行typeof;
    赋值运算优先级比较低,通常最后执行;
    一元操作符、赋值、三元条件运算符都是从右至左的结合性;
    测试: var a=1; b=(a++)+a; //b=3
  2. 对象转为原始值时,先尝试使用valueOf(),再尝试使用toString(),除了Date(),它只是使用toString()方法;
  3. ==操作符的类型转换
    • null,undefined =>相等
    • 数字,字符串 =>字符串转为数字再比较
    • 一个值为boolean =>true转1,false转0
    • 一个值对象,一个值是数字或字符串,对象先转为原始值
    • 其他不同类型间比较均不相等
  4. 当一个值是数字,一个值是字符串时,+会首先考虑将数字转为字符串,而>会将字符串转为数字,例如"one"<3会将one转为NaN,结果为false;
  5. in 运算符可以查找数组中是否存在某个元素,或者对象中是否存在某个属性;
  6. &&操作符使用,if(a==b) f();(a==b)&&f();等价;
  7. typeof返回值(见表4-3)
0 0