第一章
1.ECMAScript:1997年ECMA发布ECMAScript第1版;第2版没有大的调整;1999年第3版加入正则 try-catch等标注着它成为一门真正的编程语言;第4版跨域太大被放弃;3.1被定为第5版,新增json,于2009.12发布;
2.Dom:1998年Dom1由W3C发布,主要规定了任何映射文档结构和Dom HTML的方法;DOM2增加了鼠标事件和操作CSS;
3.BOM:HTML5对BOM标准进行了规定
第二章
1.defer外部js延迟到文档解析完再执行
async异步下载js,不影响解析html
2.noscript标签,里面的标签在script不被支持和禁用js的时候显示
第三章
1.本章将主要按照ECMA3介绍
2.use strict
3.typeof可以判断function
4.undefined == null
5.只要意在保存对象的变量还没有真正保存对象,就应该明确地让改变量保存null
6.浮点数值也在某些语言中叫双精度数值
7.由于保存浮点数需要的内存是保存整数的两倍,一次js会不失时机得将浮点数转换为整数
8.0.1 + 0.2 !== 0.3问题,分母非2 的整数倍的小数是不精确的
9.0 / 0 // NaN
10.Number(null) // 0
Number(undefined) // NaN
11.Number(‘’) // 0
12.parseInt() // 忽略签名空格,不能处理负数
parseFloat() // 只能处理十进制
13.字符串:\n换行 \b空格 \r回车
14.hasOwnProperty isPrototypeOf propertyIsEnumberable是否可枚举属性
15.操作符:算数操作符 关系操作符 相等操作符
一元操作符 布尔操作符
16.大写字母字符编码 < 小写字母字符编码
17.*= /= %=
18.其他语言函数重:同一个函数名,定义参数的数据类型和数量不同
第四章
1.很多语言中,字符串以对象的形式表示
2.函数的参数是按值传递的,不是按引用。但当参数是复杂类型时,内部修改参数会反应到全局
3.垃圾收集机制:引用计数模式不能处理循环引用的问题
4.为防止页面消耗过多电脑内存,分配给浏览器的内存少于桌面应用
第五章
1.字面量创建对象,不会调用Object构造函数
2.[]方式访问属性,可以通过变量方式,或者当key有特殊字符(比如空格)
3.字面量方式创建数组,不会调用Array构造函数
4.数组最多包含4294967295项
5.push()和pop()方法模拟栈结构(后进先出);shift()unshift()模拟队列结构(先进先出)
6.数组sort()方法比较的是字符串编码,即使每一项都是number类型
7.foreach()没有返回值;map()和filter()有返回值
8.reduce((pre, cur, index, array) => { return }) pre是上次执行的返回值
9.Date类型能保存1970.01.01前或后的285616年
Date.now()获取现在距离原点时间的毫秒
10.函数声明式:function fn () {}
表达式:let fn = function () {}
11.arguments.callee:函数内部获取函数名,这样函数再赋值给变量后不用在意变量名
arguments.callee.caller():;在函数内部获取调用该函数的函数
12.length:函数定义时参数数量
13.基本包装类型:Number String Boolean
自动创建的基本包装类型数据,只存在于代码执行的一瞬间
14.charCodeAt():返回位置处字符的编码
trim():删除前后空格
15.evel()中变量名和函数名不会提升
第六章
1.创建对象方法:
1)工厂模式:
function creatObj (name) {
var o = {
o.name = name
}
return o
}
2)构造函数模式:
function CreatObj (name) {
this.name = name
this.say = function () {
console.log(this.name)
}
}
构造函数的实例的同名方法是不相等的
改进:
function CreatObj (name) {
this.name = name
this.say = say
}
function say () {
console.log(this.name)
}
如果需要很多方法,就需要定义许多全局函数
3)原型模式
function Person () {
Person.prototype.name = 'zby'
Person.prototype.say= function () {
console.log(this.name)
}
}
改进:
function Person () {
Person.prototype = {
constructor: Person
name: 'zby',
say: function () {
console.log(this.name)
}
}
}
当内部有复杂类型时,实例1修改会影响实例2
改进:构造函数+原型模式
function CreatObj (name) {
this.name = name
}
CreatObj .prototype = {
constructor: CreatObj ,
say: function () {
console.log(this.name)
}
}
2.当为实例添加同名属性、方法时,并没有修改其原型的属性、方法
3.hasOwnProperty()检查属性是否是在实例中
4.in:判断属性是否存在于实例及其原型中
5.for-in:遍历包括原型中的属性和实例中不可枚举的属性
Object.keys():返回实例中可枚举的属性
Object.getOwnPropertyNames()得到所有实例的属性
第七章函数表达式
1.arguments.callee()也可以通过命名函数来解决
2.字执行函数可以避免向全局添加变量
第八章BOM
第九章客户端检测
第十章DOM
第十一章DOM拓展
第十二章DOM2和DOM3
第十三章事件
第十四章表单
表单
1.form自带的submit功能:浏览器在提交请求之前触发submit事件,可以在submit里进行一些操作,或者组织提交
2.submit和click事件触发顺序各浏览器不一致
3.blur事件和change事件的触发顺序各浏览器不一致
4.表单序列化:多选框每个选中值单独一条数据;select元素的值就是option的value属性值,如果没有value属性就是option的文本值
剪切板
第十五章canvas
第十六章html
拖放
第十七章错误处理与调试
第十八章javascript与XML
第十九章E4X
第二十章Json
1.json不支持变量,值不能是undefined
2.序列化stringify()第二个参数可以是数组,只序列化数组中存在的元素为key的键值对;也可以是函数,参数为key value返回处理过的value;
第三个参数可以是数字或者字符串,数字代表缩进空格数,字符串代替空格
第二十一章Ajax与Comet
1.2005年被提出
2.readyStatus:0未调用open()——1未调用send()方法——2未收到响应——3已接收到部分响应——4客户端可以使用响应了
第二十二章高级技巧
1.冻结对象
2.定时器:时间参数只能保证在该时间后回调被添加到队列,但是不能保证该时间后被执行
自定义事件
第二十三章离线应用与客户端存储
第二十四章最佳实践
1.switch比if-else性能好,switch中的case顺序可以按照从最可能到最不可能的顺序写
2.innerHTML比频繁创建dom快得多
第二十五章新型API
1.document.hidden:页面是否在显示
2.visibilitychange:切换可见性触发