第一章 js简介
- P2 js组成部分
ECMAScript,DOM,BOM - P3 宿主环境、ECMA组成部分
- P5 文档对象模型(DOM)定义
DOM是针对XML但经过扩展用于HTML的应用编程接口。DOM把整个页面映射为一个多层节点结构 - P6 DOM级别
第二章 在HTML中使用js
- P10 script标签属性,type属性值是MIME,
P12 src属性可以指向当前HTML页面所在域之外的某个域中的完整URL
P4 async 属性:不让页面等待脚本下载和执行,从而异步加载页面其他内容
- 该元素的开始标签和结束标签都不能省略
- P16 文档模式DOCTYPE
第三章 基本概念
- P19 语法:区分大小写、标识符
- P22 变量: 用var定义的变量将成为定义该变量的作用域中的局部变量,如果省略了var就会变成全局变量
- P23 typeof操作符,判断数据类型
- P28 NaN,isFinite() isNaN()
- P31 一元加操作符的操作与Number()相同
- P33字符字面量即转义字符;P34 转换为字符串的方法toString(),String(),+''
- P35 Object类型具有的属性和方法
Object类型是所有它的实例的基础,也就是说Object类型具有的任何属性和方法都存在于更具体的对象 - P44 布尔操作符 !!name === Boolean(name), &&和||短路操作;
操作符应用于对象时,会调用对象的toString或valueOf方法
P45 在有一个操作数不是布尔值的情况下,逻辑与和逻辑或不一定返回布尔值,具体返回参考P45 - P48 加法操作,任何类型和字符串相加都会被转化为字符串拼接
P50 大写字母的字符编码全部小于小写字母的字符编码 - P62 switch 使用的是全等操作符,不会进行类型转换
- P64 ECMAScript中的参数在内部是用一个数组来表示的,可以通过
arguments对象接收参数,利用这个参数实现类似重载的功能;
命名参数只提供便利,不必需
第四章 变量、作用域和内存问题
- P70 访问变量有按值和按引用两种,而参数只能按值传递
- P72 引用类型的值检测,instanceof
- P73 执行环境及作用域
- P76 没有块级作用域,使用var声明的变量会自动添加到最接近的环境
中 - P78 垃圾收集,两种方式:标记清除和引用计数;
引用计数会引起循环引用问题;
用户可以手动启动浏览器的垃圾收集功能; - P81 管理内存,全局变量可以解除引用
第五章 引用类型
- P83引用类型是一种数据结构,用于将数据和功能组织在一起,俗称类
常用的引用类型基本都重写了Object的valueOf()\toLocaleString()֖\toString()三个方法 - P83 Object类型
- P103Array类型
P105检测数组 Array.isArray()
P107数组转换成字符串用join,toLocaleString() ,toString()֖,valueof()
P109数组的方法,push,pop,shift,unshift,sort,reserve,
P96 迭代方法 every,some,map,forEach,filter
P115归并方法reduce - P116Date类型
- P120 RegExp 类型
- 匹配模式有三个:i(忽略大小写),g(全局),m(多行模式)
- 正则表达式中的元字符:( [ { \ ^ $ | ) ? * + . ]}
- 实例方法: exec(),test()
- P110 Function类型
函数是对象
函数声明提前
-
P114函数内部属性arguments,this
-
P116函数的属性和方法
- 属性有length和prototype
prototype是保存引用类型所有实例方法的真正所在;prototype属性是不可枚举的,因此使用for-in无法发现 - 每个函数都有两个非继承来的方法apply()֖和call(),用法是在特定的作用域调用函数,实际上等于设置函数体内this的值
- bind()方法创建一个函数的实例,其this值会被绑定到传给bind()函数的值
- 属性有length和prototype
7.P118基本包装类型:Boolean,Number ,String
- 引用类型和基本包装类型的主要区别是对象的生存周期
- Number类型的方法toPrecision,toExponential,toFixed
- P123 String的方法 charAt/charCodeAt/concat/slice/substr()֖/substring()/indexOf/lastIndexOf/trim()/trimLeft()/trimRight()/toUpperCase/toLowerCase/localeCompare/fromCharCode
- 字符串模式匹配方法: match(), search(),replace(),split();
- match用法:text.match(pattern)与pattern.exec(text)相同
8.单体内置对象:由 ECMAScript 实现提供的对象,在ECMAScript 程序之前已存在
- Global对象
方法: encodeURI/encodeURIComponent/decodeURI/decodeURIComponent - eval()方法
- window 对象
- P134 Math对象
- Math的方法:min/max/ceil/floor/round/random
第六章 面向对象的程序设计
1、P139 属性类型: 数据属性和访问器属性
- ECMA-262 定义只有内部才会访问的属性时,描述了属性的各种特征
- 为了表示特性是内部值,该规范把他们放在了两对方括号中如[[Enumerable]]
- 修改属性默认的特性Object.defineProperty(obj,attr,{configurable: false})
2、P141访问器属性getter和setter
-
使用属性值的一个常用方式是,设置一个属性的值会导致其他属性发生变化
setter - JavaScript | MDN (mozilla.org) - 定义多个属性的方法Object.defineProperties
- 读取属性的特性:Object.getOwnPropertyDescriptor()
3.P144创建对象
- 工厂模式
- P145构造函数模式:new出来的对象会有一个constructor属性,值是该构造函数
-
原型模式: 构造函数的prototype属性,包含了该构造函数所有实例化的对象共享的属性和方法
image.png- isPrototypeOf()
Person.prototype.isPrototypeOf(person1)
- Object.getPrototypeOf()
Object.getPrototypeOf(person1) == Person.prototype
- hasOwnProperty()
person1.hasOwnProperty("name")
- P152 原型与in的关系:不管时原型上的属性还是对象本身的属性都能访问
- Object.keys()
- P155更简单的原型语法,会使构造函数的constructor属性不再指向该构造函数,如果想使用,可以在原型中手动加这个属性,指向构造函数
- 组合使用构造函数和原型模式
- 动态原型模式
- P161 寄生构造函数模式:这个模式可以在特殊情况下用来为对象创建构造函数
- 稳妥构造函数模式:不使用this和new
4.继承
-
原型链:用父函数的实例对象覆盖子函数的原型
image.png - P167借用构造函数
在子类型构造函数的内部调用超类型构造函数,使用call或apply实现 - 组合继承
第七章 函数表达式
1、P177 递归:一个函数通过名字调用自身
2、闭包:有权访问另外一个函数作用域中的变量的函数
- P182 关于this对象: 匿名函数的this一般是全局;如果把外部作用域中的this对象保存在一个闭包能够访问的变量里,就可以让闭包访问该对象了(var that = this)
- 内存泄漏
3、模仿块级作用域: 使用立即执行函数
4、P188私有变量
- 包含函数的参数,局部变量和函数内部定义的其他函数
- 特权方法: 有权访问私有变量和私有函数的公有方法
- 单例模式: 只有一个实例的对象
var singleton = function(){
// 私有属性
var privateVariable = 10;
// 私有方法
function privateFunction(){
return false;
}
// 公有方法和属性
return {
publicProperty: true,
publicMethod : function(){
privateVariable++;
return privateFunction();
}
};
}();
- P191 增强的模块模式
第八章 BOM
1、window对象
- 窗口关系及框架:frames属性
- 窗口位置:screenLeft/screenTop/moveTo()/moveBy()
- 窗口大小: innerWidth/innerHeight/outerWidth/outerHeight/resizeTo/resizeBy
- 导航和打开窗口:window.open()
- P203 间歇调用和超时调用:setTimeout()/clearTimeout()/setInterval()/clearInterval()
一般认为,使用超时调用来模拟间歇调用的是一种最佳模式
JavaScript是一个单线程的解释器,因此一定时间内只能执行一段代码。为了控制要执行的代码,有一个JavaScript任务队列,这些任务会按照将他们添加到队列的时间顺序执行。 - 系统对话框:alert()Njconfirm()֖和prompt()
2、P208 location对象
image.png
- replace()方法,不会生成浏览记录
- reload():重新加载
3、navigator对象
- 注册处理程序:navigator.registerContentHandler
4、screen对象
5、history对象
第九章 客户端检测
第十章 DOM
1、定义: DOM描绘了一个层次化的节点树,允许开发人员添加,移除和修改页面的某一部分
2、P248 节点层次
- Node节点
- P254 Document类型
- 查找元素:getElementById()/getElementsByTagName()
- P258 特殊集合: document.forms/document.images/document.links
- P261 Element对象
- HTML对象
- 取得属性: getAttribute()、setAttribute()֖、removeAttribute()
注意:自定义属性需要加上data-前缀,以便验证 - attributes属性
- 创建元素: document.createElement()/ appendChild()/ insertBefore()/replaceChild()
- 元素的子节点
- Text类型
- Comment类型
- CDATASection类型
- DocumentType类型
2、DOM操作技术
- 动态脚本
- 动态样式
- 操作表格
第十一章 DOM扩展
- 选择符API: querySelector()/querySelectorAll()