1、错误
- try 语句测试代码块的错误。
catch 语句处理错误。
throw 语句创建自定义错误。
finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 - try 语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
JavaScript 语句 try 和 catch 是成对出现的。
语法:
try {
... //异常的抛出
} catch(e) {
... //异常的捕获与处理
} finally {
... //结束处理
}
- finally 语句不论之前的 try 和 catch 中是否产生异常都会执行该代码块。
- throw 语句允许我们创建自定义错误。
正确的技术术语是:创建或抛出异常(exception)。
如果把 throw 与 try 和 catch 一起使用,就能够控制程序流,并生成自定义的错误消息。
2、调试
浏览器启用调试工具一般是按下 F12 键,并在调试菜单中选择 “Console” 。
- 设置断点
在调试窗口中,你可以设置 JavaScript 代码的断点。
在每个断点上,都会停止执行 JavaScript 代码,以便于我们检查 JavaScript 变量的值。
在检查完毕后,可以重新执行代码(如播放按钮)。 - debugger 关键字
用于停止执行 JavaScript,并调用调试函数。
这个关键字与在调试工具中设置断点的效果是一样的。
如果没有调试可用,debugger 语句将无法工作。
3、变量提升
JavaScript 只有声明的变量会提升,初始化的不会。
JavaScript 严格模式(strict mode)不允许使用未声明的变量。
4、严格模式
严格模式通过在脚本或函数的头部添加 “use strict”; 表达式来声明。
在函数内使用 “use strict” 只在函数内报错。
使用时,①不允许使用未定义的变量(对象)。
②不允许删除变量或对象。③不允许删除函数。④不允许变量重名。
⑤不允许使用八进制。⑥不允许使用转义字符。⑦不允许对只读属性赋值。
⑧不允许对一个使用getter方法读取的属性进行赋值。
⑨不允许删除一个不允许删除的属性。
⑩变量名不能使用 “eval” 字符串。
·变量名不能使用 “arguments” 字符串。
·不允许使用以下这种语句。
<script>
"use strict";
with (Math){x = cos(2)}; // 报错
</script>
·由于一些安全原因,在作用域 eval() 创建的变量不能被调用。
<script>
"use strict";
eval ("var x = 2");
alert (x); // 报错
</script>
function f(){
return !this;
}
// 返回false,因为"this"指向全局对象,"!this"就是false
function f(){
"use strict";
return !this;
}
// 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
function f(){
"use strict";
this.a = 1;
};
f();// 报错,this未定义
5、常见错误
在字符串中直接使用回车换行是会报错的,字符串断行需要使用反斜杠()
6、表单
- 表单验证
①通过js代码验证②通过HTML代码验证③自动验证,如果表单字段 (fname) 的值为空, required 属性会阻止表单提交。<input type="text" name="fname" required="required">
=
function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("姓必须填写");
return false;
}
}
<body>
<form name="myForm" action="demo-form.php" onsubmit="return validateForm()"method="post">
姓: <input type="text" name="fname">
<input type="submit" value="提交">
</form>
</body>
- 约束验证
详见菜鸟教程。 - E-mail 验证:
输入的数据必须包含 @ 符号和点号(.)。同时,@ 不可以是邮件地址的首字符,并且 @ 之后需有至少一个点号
function validateForm(){
var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
alert("不是一个有效的 e-mail 地址");
return false;
}
}