Javascript高级程序设计(第三版)笔记

第一章
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.cellee:函数内部获取函数名,这样函数再赋值给变量后不用在意变量名
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.字执行函数可以避免向全局添加变量

第二十章Json

扫描二维码关注公众号,回复: 6060617 查看本文章

第二十一章Ajax

第二十二章高级技巧

猜你喜欢

转载自blog.csdn.net/qq_37246828/article/details/89677698