JS高级程序设计
摘要[*]js基本的数据类型和关键点
[*]变量,作用域和内存问题
[*]垃圾回收机制
[*]面向对象的程序设计
[*]实现类与继承的经典方式
[*]BOM和DOM对象
[*]DOM扩展与高级API介绍
[*]高级编程技巧
[*]跨文档消息传递和ajax封装
[*]web worker基本实现与demo
一. Number类型关键点讲解1.进制问题
[*]八进制字面量在严格模式下无效,会导致支持该模式的js引擎抛出异常
[*]十六进制字面量的前两位必须是0x,后根任何十六进制数字(0-9及A-F)
[*]在进行算术计算时,所有以八进制和十六进制表示的数值最终将被转换成十进制数值
2.浮点数注意点浮点数值的最高精度是17位小数,但在进行算术计算时精度远远不如整数。例如 0.1 + 0.2 === 0.300000000000004(大致这个意思,具体多少个零请实际计算) 所以永远不要测试某个特定的浮点数值3.数值
[*]使用isFinite(num)来确定一个数字是否有穷
[*]ECMAScript能够表示的最小值保存在变量 Number.MIN_VALUE 中,最大值保存在 Number.MAX_VALUE 中。
[*]NaN表示非数值。在ECMAScript中,任何数值除以非数值会返回NaN,因此不会影响其他代码的执行。
[*]isNaN()用来确定传入的参数是否为"非数值"。会对参数进行转化,不能被转化为数值的则返回true。
4.数值转换parseFloat主要用于解析有效的浮点数字,始终会忽略前导的零,可识别所有的浮点数格式,但是十六进制格式的字符串始终会被转换成零。二. 字符串1. toString() 转换为字符串let num = 10;num.toString(n) n表示进制,可选,如2,8,10,16
三.循环1. break和continue
[*]break语句会立即退出循环,强制执行循环后面的语句
[*]continue语句是退出当前循环,继续执行下一循环
// 结合label,更精确的控制循环outerMost:for(var i=0;i<10;i++){ for(var j=0;i<10;j++){ if(i = 5){ break outerMost } }}//此时直接退出外部循环,continue也是类似
2. switch语句在比较值时使用的是全等操作符,所以不会发生类型转换3. 函数参数arguments和命名参数function add(n1, n2){ arguments[1] = 10;}
此时读取n2和arguments并不会访问相同的内存空间,他们的内存空间是独立的,但他们的值保持同步四.变量,作用域和内存问题1.传递参数1.所有的参数都是按值传递的。在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反应在函数外部2.当在函数内部重写obj时,这个变量引用的就是一个局部对象。而这个局部对象会在函数执行完毕后立即被销毁。2.垃圾收集
[*]js最常用的垃圾收集机制为“标记清除”,另一种不常用的是“引用计数”。
[*]原理:找出不再继续使用的变量,然后释放其内存空间。垃圾收集器会在固定的时间间隔周期性的执行这一操作。
3.管理内存解除引用:数据不再有用,将其值设置为null五.引用类型1.数组总结// 检测数值ES5方法Array.isArray(value)// 检测值是否为数组// 转换方法toString() 将数组转化为以逗号分隔的字符串valueOf() 返回的还是数组// 栈方法push() 可以接收任意数量的参数,把他们逐个添加到数组的末尾,返回修改后数组的长度pop() 从数组末尾移除最后一项,返回移除的项// 队列方法shift() 移除数组的第一项并返回该项unshift() 向数组前端添加任意个项并返回新数组的长度// 排序sort(compare)compare函数接收两个参数,如果返回负数,则第一个参数位于第二个参数前面;如果返回零,则两个参数相等;如果返回正数,第一个参数位于第二个参数后面// 降序,升序相反(a,b) => (b-a)// 操作方法concat(数组 | 一个或多个元素) // 合并数组,返回新数组slice(起始位置 ,[结束位置]) // 切分数组,返回新数组,新数组不包含结束位置的项splice(起始位置,删除的个数,[插入的元素]) // 删除|插入|替换数组,返回删除的元素组成的数组,会修改原数组// 位置方法indexOf(查找的项,[查找起点位置]) // 使用全等操作符,严格相等lastIndexOf()// 迭代方法,都接收两个参数,一个是要在每一项上运行的函数,一个是作用域(可选)1.every 对数组中每一项运行给定函数,如果函数对每一项都返回true,则返回true every(fn(value,index,array){return ...},)2.some 对数组中每一项运行给定函数,如果函数对任一项都返回true,则返回true3.filter 对数组中每一项运行给定函数,返回该函数会返回true的项组成的数组4.forEach 对数组每一项运行给定函数,无返回值5.map 对数组每一项运行给定函数,返回每次函数调用返回结果组成的数组// 归并方法 reduce和reduceRight(和前者遍历的方向相反),构建一个最终返回的值reduce(fn(prev,cur,index,array){ return ... },initValue)1.fn返回的值会作为第一个参数传递给下一项2.initValue做为归并基础的初始值
回的人少,我来小顶一下
页:
[1]