1、Error:错误对象 以后工作/学习中: 1、快速找错 2、只要是用户输入,记得要防用户
1、***浏览器自带4种错误类型:快速找错
语法错误:SyntaxError - 多半都是符号写错了
引用错误:RerferenceError - 没有创建就去使用了
类型错误:TypeError - 不是你的方法,你却去使用了,很有可能拿到的是一个undefined再去做操作
范围错误:RangeError - 只有一个API会碰到:num.toFixed(d);//d取值范围:0~100之间
2、只要发生错误,就会报错:会导致后续代码终止了(如果是桌面应用更恐怖:闪退了),不执行了,我们不希望,用户的体验感差了
错误处理:就算发生错误,我们也不希望报错,而是给出一个错误提示,让后续代码可以继续执行
语法:
try{
只放入你可能出错的代码
}catch(err){
只有发生错误才会执行
err - 保存着我们的错误信息,但是是英文
}
try...catch...的性能非常差,几乎所有代码里效率最低的
*可以用一个技术代替:分支结构if...else...
*开发经验:记住一切的客户端输入/用户输入都是坏人 - 你不必担心,只要你做好防护就绝对不会出错(!isNaN、正则)
3、抛出自定义错误:
throw new Error("自定义错误信息");
2、*****Function:函数:预定义好的,以后可以反复调用的代码段 考点: 1、***创建:3种 1、*声明方式:function 函数名(形参列表){函数体;return 结果;} - 完整的声明提前 2、直接量方式:var 函数名=function(形参列表){函数体;return 结果;} 3、构造函数方式:var 函数名=new Function("形参1",...,"函数体;return 结果;"); 何时:如果你的函数体不是固定的,而是动态拼接的一个字符串 var arr=[3,21,453,65,78,6,87,9,8]; var user=prompt("数组排序,如果输入a-b则为升序排列,如果输入b-a则为降序排列") var compare=new Function("a","b","return "+user); arr.sort(compare);
2、***调用时:如果由return,记得要接住
var result=函数名(实参列表);
3、***作用域
4、***声明提前
5、***按值传递
6、***重载(overload):相同的函数名,传入不同的实参,可以自动选择对应的函数执行操作
为什么:减轻程序员的负担!
问题:js的语法不支持重载!
js不允许多个同名函数同时存在,如果同时存在,最后的会覆盖之前所有的
解决:在【函数中】有一个对象 - arguments对象
什么是arguments:只能在函数中使用,自动创建,是一个类数组对象(类似数组)
作用:***可以接受住所有的实参
只有3个点和数组相同:
1、可以使用下标
2、可以使用length
3、可以遍历
***arguments可以做的事:
1、变相实现重载:通过在函数内部判断arguments,执行不同的操作
2、以后有没有形参已经无所谓了
3、正式开发中,有可能将多个函数整合为一个函数 - 提升代码性能 - 代码优化
7、***匿名函数:没有名字的函数
1、匿名函数自调:只能执行一次
为什么:节约内存,因为匿名函数,没有变量引用着,用完就会立刻被垃圾回收器回收掉
如何:
(function(){
//以后可以代替全局代码写法,尽量不要写到外部,而且不必担心事件会被释放
})();
2、匿名函数回调:将函数作为实参,传递给其他函数调用
1、学习回调的目的:让你们直到哪些东西属于回调,匿名函数只要不是自调,就是回调
arr.sort(function(){})
str.replace(reg,function(){})
btn.onclick=function(){}
2、以后ES6技术:箭头函数:简化一切的回调函数
3、了解一下回调函数的原理:回调函数调用过吗?
只不过不是我们程序员在调用,而是创建此方法的前辈们,提前在他的函数内部,帮我们调用好了
作业: 1、程序员甲:封装了一个方法,传数字和小数位数,四舍五入保留小数位数,但他做了一个限制,传入的不是数字或者不能被隐式转为数字就会报错 程序员乙:封装了一个方法,由用户输入单价、数量、收款金额,计算找零,为了解决舍入误差,使用了程序员甲的方法,如何去错误处理 2、滚动轮播 3、昨天的PPT36页,两道题 - 练习重载