大致看过一遍红宝书,想让自己留下点东西。
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)}
组合继承(使用最多)
- 使用原型链实现原型的属性和方法继承
- 借用构造继承实例的属性