if 语句
if (condition) statement1 else statement2
- condition 不一定是布尔值,ECMAScript会自动调用
Boolean()将其转换为一个布尔值 - statement 可以放在花括号里,也可以不。但推荐放在花括号里,即使只有一行代码
- 甚至,可以将整个if语句写在一行里,但不推荐这样写
do-while语句
do {
statement
} while (expression)
- 后测试循环语句
- 在循环体中的代码被执行后,才会测试出口条件
var i = 0;
do {
i += 2;
} while (i < 10);
alert(i);
while语句
while(expression) statement
- 前测试循环语句
var i = 0;
while (i < 10) {
i += 2;
}
for语句
for (initialization; expression; post-loop-expression) statement
- 前测试循环语句
- 能够在执行循环前,初始化变量
- 能够在执行循环前,定义循环后要执行的代码
- 使用while循环做不到的,使用for循环同样做不到。for循环只不过是把与循环有关的代码集中在了一处
ECMAScript没有块级作用域,因此循环内定义的变量,循环外也可以访问
var count = 10;
for (var i = 0; i < count; i++) {
alert(i);
}
alert(i); //可以访问 i
//initialization不是必须带着 var
var count = 10;
var i;
for (i = 0; i < count; i++) {
alert(i);
}
//都缺省,就是无限循环
for (;;) {
DoSomething();
}
等价的while写法:
var count = 10;
var i = 0;
while (i < 10) {
alert(i);
i++;
}
for-in 语句
for (property in expression) statement
- 是一种精准迭代语句,可以用来枚举对象的属性
- ECMAScript的对象属性没有顺序,所以
for-in输出的属性其顺序也不可预测,可能因浏览器而异
- ECMAScript的对象属性没有顺序,所以
var不是必须的,但是为了保证使用局部变量,推荐使用var- 要迭代的值为
null或undefined时,for-in语句会抛出错误- 但ECMAScript 5更正了上述行为:不再抛出错误,只是不执行循环体
- 为了最大限度保证浏览器兼容性,建议使用
for-in循环前,先确认迭代的值是不是null或undefined
// 遍历 BOM 中 window对象 的所有属性
for (var propName in window) {
document.write(propName);
}
label 语句
label : statement
- 在代码中添加表情,以便将来由
break或continue语句引用 - 加标签的语句,一般都要与for语句等循环语句配合使用
start: for (var i=0; i < count; i++) {
alert(i);
}
break和continue 语句
break, 直接跳出循环continue, 回到循环顶部继续执行break和continue都可以和label语句联合使用,从而回到代码中特定的位置- 常用于循环嵌套的情况下
- 但过度使用的话,会给调试带来麻烦
- 使用描述性标签
- 不要嵌套过多循环
var num = 0;
outermost:
for (var i=0; i<10; i++)
{
for(var j=0; j<10; j++)
{
if(i==5 && j==5)
{
break outermost;
}
num++;
}
}
alert(num); //55
var num = 0;
outermost:
for (var i=0; i<10; i++)
{
for(var j=0; j<10; j++)
{
if(i==5 && j==5)
{
continue outermost;
}
num++;
}
}
alert(num); //95
with 语句
- 将代码的作用域设置到一个特定的对象中
- 目的是为了简化多次编写同一个对象的工作
with语句的内部, 对于每个变量:- 首先认为是局部变量
- 局部环境中找不到该变量的定义,就认为是对象的属性
- 严格模式下,不允许 使用
with语句,否则视为语法错误 - 大量使用
with语句,会导致性能下降和调试困难
开发大型应用程序时,不建议使用
with语句
//使用with语句简化前
var gs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
//使用with语句简化后
with(location)
{
var gs = search.substring(1);
var hostName = hostname;
var url = href;
}
switch 语句
- ECMAScript中的
switch语句借鉴自其他语言,但也有自己的特色switch语句中,可以使用任何数据类型case的值可以是:- 常量
- 变量
- 表达式
- 比较的时候使用全等操作符,因此不会发生类型转换
switch ("hello world") {
//case 这里,是一个表达式
case "hello" + "world":
alert("Greeting was found");
break;
case "goodbye":
alert("Closing was found");
break;
default:
alert("Unexpected message was found");
}
//看哪个分支为true
switch (true) {
//case 这里,是表达式
case num < 0:
alert("Less than 0");
break;
case num >=0 && num <= 10:
alert("Between 0 and 10");
break;
case num > 10 && num <= 20:
alert("Between 10 and 20");
break;
default:
alert("More than 20");
}