web前端--JavaScript(五)JavaScript高级程序设计-笔记总结-1-6章

大致看过一遍红宝书,想让自己留下点东西。

script属性

  • defer属性,表示加载完dom后再解析js,只适应于外部js脚本。

  • async属性:当前js脚本加载不必等其他脚本,不能保证异步正常展示。

    外部js优点:

  • 可维护性

  • 可缓存:两个页面使用同一js,只要加载一次。

js语句的分号建议一直使用;;

数据类型

  • 基本:字符,数值,布尔(true和false区分大小写),null,undefined
  • 引用类型:数组,对象
  • typeof temp或者typeof(temp) ty**peof null 返回object**

3,14e2=314

数值

  • 特殊数值NaN:涉及的操作均为NaN;与任何值不等,不等Nan

  • Number():null和空字符串–》0

  • parseInt(”124as”)空字符–》Nan

  • var num= Math.pow(5,2) //25

    字符

  • num.toString(),num.String()

  • num.valueOf()返回数组形式

  • concat或者+: 拼接

  • str1.trim()

    变量

  • 函数内定义的var temp变量,在函数外会被销毁,而只定义temp作为全局变量会保留;

不能重载,即函数覆盖。
作用域链

  • 在执行环境中可以访问相应的变量,函数外不能访问函数内的,内可以访问外的。

    垃圾收集的策略

  • 标记清除:不使用的值加标记,离开执行环境即清除。

  • 引用计数:引用次数,归0时清除。

    数组item Array

  • 栈push pop

  • 队列shift取出第一个,unshift末尾增加

  • reverse()反转

  • color.slice(1),转为拼接字符串

  • num.indexOf(6) 返回下标或-1

  • splice()删除,插入,替换

  • filter()过滤,括号内+条件-》

  • map(function(){})数组值转换

  • reduce(function)迭代累加

    正则表达式

  • var patten1 = /[cb]at/i; //匹配第一个包含cat和bat的字符

  • var patten2 = /{cb}at/i; {cb}at

  • var jiewei=/.doc/gi;

    函数内置属性

  • arguement.callee: 消除紧密藕合,即,在别处也可使用该函数(递归调用后,可以继续使用)

  • this,函数在全局作用域运行时,this=window

eval()内的变量或函数都不会提升

创建对象(五种方式)

  • 工厂模式:函数内创建对象,最后return 对象。使用时var person= createPerson(‘hzx’,29)
  • 构造函数:函数内使用this,无需return。使用时var person = new creatPerson()
  • 原型模式: prototype所有成员共享属性和方法,各自实例可以修改自己的值。**存在问题:两个实例共享的原型,属性值是引用类型时,该值会被共享。2、**

function Person {
person.prototype.name=name }

  • 组合使用构造函数和原型:构造函数定义实例,原型定义共享的属性和方法

  • 动态原型:属性和方法,在方法中使用prototype

    原型链理解

  • 一个原型对象A(包括属性和方法)被另一个原型B继承,B可以使用A的属性和方法。

  • B.prototype= new A()

  • 存在问题:1、引用类型的属性值会共享 2、无法向原型A中传参。解决方法(借用构造函数和组合继承)

借用构造函数

  • 使用call()和apply(): 子构造函数中,funA{ funA.call(this)}

组合继承(使用最多)

  • 使用原型链实现原型的属性和方法继承
  • 借用构造继承实例的属性