Error错误对象
以后工作/学习中目的:
1、快速找错
2、记得有的时候可能要防一手用户
1、*浏览器自带4种错误类型,可以快速找到自己的错误:
语法错误:SyntaxError - 多半都是语法/符号错了
引用错误:ReferenceError - 没有创建过就去使用了
类型错误:TypeError - 不是你的方法/属性,你却使用了
范围错误:RangeError - 只有一个API:num.toFixed(d);
2、只要发生错误,就会报错
只要发生错误,就会报错,会导致后续代码终止执行了(后面代码没效果、如果你做的是APP、软件发生报错,则会闪退,体验感差),我们不希望
错误处理:就算发现错误,我们也不希望报错,而是给一个错误提示,后续代码依然可以继续执行
语法:
try{
只放可能出错的代码
}catch(err){
只有发生错误后才会执行
}
try...catch...的性能非常差,几乎是所有代码中效率最差的
*可用一个技术代替:if...else...
*开发经验:提前预判用户:记住一切的客户端输入/用户输入都是坏人 - 你也不必担心,只要做好你该做的防护即可(!isNaN、正则);
try...catch...用if...else...代替案例
<script>
function round(num, d) {
if (!isNaN(num) && !isNaN(d)) {
num *= 10 ** d;
num = Math.round(num)
num /= 10 ** d;
return num;
} else {
throw new Error("傻逼,传入的必须是两个数字");
}
}
var money = prompt("收款金额");
var total = prompt("应收金额");
if (!isNaN(money) && !isNaN(total)) {
console.log("找零:" + round(money - total, 2));
} else {
alert("傻逼,传入的必须是两个数字")
}
console.log("后续代码")
</script>
3、抛出自定义错误:
throw new Error("自定义错误描述");
*Function
1、*创建:3种
*声明方式:function 函数名(形参列表){函数体 return 返回值} - 具有完整的声明提前
直接量方式:var 函数名=function(形参列表){函数体 return 返回值} - 只提前函数名部分,函数名其实就是一个变量名
*构造函数:var 函数名=new Function("形参1","形参2",.....,"函数体");
何时:如果你的函数体不是固定的,而是动态拼接的(函数体现在毕竟是一个字符串)
2、调用:var 接住结果=函数名(实参列表);
3、考点
1、***如何创建(之前笔记)
2、***什么是作用域(之前笔记)
3、***什么是声明提前(之前笔记)
4、***什么是按值传递(之前笔记)
5、*重载
什么是重载:相同的函数名,传入不同的实参,可以自动选择对应的函数执行
为什么:减轻程序员的压力
问题:JS的语法不支持重载的!
JS不允许多个同名函数同时存在,如果同时存在,最后的会覆盖之前所有的
解决:在【函数中】有一个对象 - arguments对象
什么是arguments:自动创建的,是一个类数组对象,不是数组!作用:***接受住所有的实参***,
以后有没有形参无所谓了,变相的实现了重载,可以在函数内部判断arguments的不同,执行不同的操作
只有3个点和数组相同:
1、都有下标
2、都有length
3、都可以遍历
正式开发中,开发结束后,需要做代码的优化,可能就会将多个函数整合为一个函数
6、*匿名函数(2种)
匿名函数:没有名字的函数,理论上来说我们无法调用
1、自调:函数自己调用自己
语法:
(function(){
})();
特点:自调的代码只能执行一次 === 全局代码
为什么:节约内存,因为匿名函数,没有变量引用着,用完后,就会立刻释放
2、回调:将函数作为了实参,传递给其他函数使用
1、学习回调的目的:让你们知道哪些叫回调,匿名函数,只要不是自调,就是回调
arr.sort(function(a,b){return a-b})
str.replace(reg,function(){})
btn.onclick=function(){}
2、以后ES6有一个技术:箭头函数:简化一切的【回调函数】
3、了解了以下回调函数的原理 - 其实不是没调,只是我们没调用,前辈们早就帮我们调用好了