条件语句
if
语句
if (x == 1)
x = 2;
else if (x == 2)
x = 3;
else
x = 4;
switch
语句
- 与 C/C++ 的区别,
case
后面可以跟随任何表达式。
- 匹配操作用的是
===
而非==
,不会涉及类型转换。
- 因为不是所有的
case
表达式都能执行到,所以应当避免有副作用的表达式,而使用 常量表达式 。
switch (n) {
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
break;
}
循环
while
循环
var count = 0;
while (count <= 10) {
count++;
}
do/while
循环
var count = 0;
do {
count++;
} while (count <= 10);
for
循环
for (var i = 0; i < 10; i++) {
console.log(i);
}
for/in
循环
// 输出数组array所有元素
for (var val in array) {
console.log(val);
}
// 输出对象obj所有可枚举属性
for (var val in obj) {
console.log(val);
}
跳转语句
标签语句
- 可以给语句添加标签,配合
break
和continue
使用:
- 标签名字可以和变量或函数重名。
- 任何语句可以有多个标签。
// 给while循环添加标签mainloop
mainloop : while(token != null) {
}
break
语句
- 单独使用时的作用是立即退出最内层的循环或
switch
语句。
- 配合标签使用可以跳出多层循环。
- 配合标签使用的示例:
outsideloop: for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == targetI && j == targetJ)
break outsideloop;
}
}
continue
语句
- 配合标签使用可以跳出多层循环。
- 配合标签使用的示例:
outsideloop: for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
if (i == targetI && j == targetJ)
continue outsideloop;
}
}
return
语句
异常相关 —— throw
、try
、catch
、finally
-
throw
可以后接任何类型,通常可以抛出代表错误码的数字,或者可读的错误消息的字符串,或者一个对象内部携带关于异常的必要信息。
-
JavaScript 解释器抛出的异常通常是
Error
类型及其子类,Error
内部包含一个name
属性表示错误类型,一个message
属性用来存放传递给构造函数的字符串。
- 可以直接抛出
Error
类型或者继承Error
的子类。
- 简单示例:
try {
throw Error("nothing happen");
}
catch (e) {
// 处理异常
}
finally {
// 执行清理工作
}
var foo = function () {
try {
throw Error("nothing happen");
}
finally {
return 1; // 未处理异常直接正常返回
}
}
foo();
其他语句类型
with
语句
-
with
语句慢且难以优化,不建议使用。
- 严格模式下禁止使用
with
语句。
- 简单示例:
document.forms[0].address.value
with(document.forms[0]) {
// 由于with的存在,这里可以直接访问表单元素
name.value = "";
address.value = "";
email.value = "";
}
// 若不存在o.x会报错,但是如果存在,则相提供了访问o.x的快捷方式
with(o) x = 1;
debugger
语句
-
debugger
语句在调试模式运行时,相当于产生一个断点,普通模式运行时则没有任何效果。
- 简单示例:
function f(o) {
if (o === undefined) debugger; // 调试模式运行时会中断
...
}
"use strict"
指令
-
"use strict"
是指令而不是语句,用于将当前区域声明为严格模式。
- 指令与语句的区别:
- 不包含任何语言关键字,仅仅是一个特殊字符串直接量。ES5以后的标准可能会用
use
用作关键字,这样就能省略引号了。
- 只能出现在脚本代码的开始或者函数体的开始,任何实体语句之前。
- 如果函数体定义所处的代码是严格模式或者函数体使用了
"use strict"
指令,则函数体的代码也是严格模式。
- 如果
eval()
调用所处的代码是严格模式或者要执行的字符串使用了"use strict"
指令,则eval()
内的代码是严格模式。
严格模式
- 禁止使用
with
语句。
- 变量必须使用
var
事先声明(在非严格模式下,如果不使用var
事先声明,则会被当做隐式声明了一个全局变量,不论隐式声明时的作用域在哪)。
- 函数中的
this
是undefined
,方法中的this
是对象(非严格模式下,函数中的this
是全局对象)。
- 通过
call()
或apply()
调用函数时,this
是传给call()
或apply()
的第一个参数(非严格模式,若this
是null
或undefined
,会被全局对象代替)。
- 给只读属性赋值或不可拓展的对象创建新成员会抛出 类型错误异常 (非严格模式下,只是操作失败而不报错)。
- 传入
eval()
的代码不能声明变量或定义函数。
-
delete
运算符的非法使用会抛出 语法错误异常 (非严格模式下,只是操作失败,并返回false
)。
- 在一个对象中定义同名属性会产生语法错误(非严格模式下,不会报错)。
- 函数声明中有同名参数会报错(非严格模式下,不会报错)。
- 禁止八进制整数直接量。
-
eval
和arguments
当做关键字。
网友评论