JavaScript常用语句
语句 | 语法 | 说明 |
简单语句 | ; | 语句以;分号结束 |
语句块 | {} | 将一组语句组成语句块,ES中没有语句块作用域,也可用作对象字面量 |
添加标签语句 | label | 给代码添加标签供其它语句使用。 (例如break和continue,中断指定标签语句) |
分支结构语句 | if | 条件选择,在条件表达式中,会将结果隐式转换为Boolean类型。 |
switch | 多分支判断语句 | |
循环结构语句 | while / do-while | 满足条件才执行循环体 / 先执行循环体,再进行条件判断 |
for | for语句和while功能相同,都为循环,只是将初始化,条件判断,递增递减结合一起。 | |
for-in | for循环另一形式,遍历对象的属性和对象原型链上的属性。 | |
跳转结构语句 | return | 返回语句,在return之后没有返回时,返回undefined。 |
break | 在switch语句中,不继续执行下面的case语句。 | |
continue | 在循环语句中中断本次循环,执行下一次循环。 | |
异常处理语句 | try | 将代码放在try块中,使得异常发生时能够做出相应的处理。 |
throw | 抛出异常语句。 | |
调试语句 | debugger | 调试语句 |
作用域设置语句 | with | 将代码的作用域设置到一个特定的对象中。 (不推荐使用,不好控制结果) |
部分细节说明:
label 语句
label:statement; //给代码添加标签供跳转语句使用。 break label; //用在循环语句中中断整个循环。 continue label; //在循环语句中中断本次循环,执行下一次循环。
switch 语句
//switch结构 switch(expression) //表达式不限于整型,可以是任意表达式 { case value1: //value可以是整型也可以是其它类型或一个表达式,但比较时不会进行类型转换,而且使用全等(===)进行匹配。 statement1; break; //在找到匹配的case分支后,不继续执行下面的case语句。 case value2: statement2; break; default: //如果都未匹配,则执行default下的语句。 statement; }
while / do-while
while(expression) //条件判断会有隐式转换 { statement; //满足条件才执行循环体。如果一开始就不满足条件,则根本不会执行循环体。 } do{ statement; //先执行循环体,再进行条件判断,这种格式至少会执行一次循环。 }while(expression); //条件判断会有隐式转换
for循环 性能优化,避免每次循环都要计算范围值
// 1.基本格式的for循环,i大部分直接复制给指定数组的长度 for(var i=0; i < arr.length; i++){ } // 2.上面在每一次循环都会重新计算一次arr的长度,如过arr是dom操作的话,会非常明显的影响效率,不推荐使用 var l = arr.length; for(var i=0,l=arr.length; i<l; i++){ } // 3. 如果循环为递减,可以直接设为i for(var i=arr.length; i>0; i--){ }
return语句注意点
return //由于引擎会在return后自动添加分号,这里实际会返回undefined,不能使用该写法 { prop:'value'; } return { //这样写才和预期一样,会返回一个对象 prop:'value'; }
try-catch 语句
try{ //try后面必须接catch或finally //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 }catch(e){ //除非try里面执行代码发生了异常,否则这里的代码不会执行 }finally{ //finally可以没有,也可以只有一个。无论有没有发生异常,它总会在这个异常处理结构的最后运行。 //即使你在try块内用return返回了,在返回前,finally总是要执行,这以便让你有机会能够在异常处理最后做一些清理工作。如关闭数据库连接等等。 //注意:如果没有catch语句块,那么finally块就是必须的。 }
throw 主动抛出异常
try{ throw "test"; //主动抛出异常 }catch(e){ console.log(e); //test }finally{ console.log('finally'); //finally }
如果内部的异常没有处理抛给了外面,在外面处理之前要处理里面的finally顺序
try{ try{ throw newError "oops"; }finally{ console.log('finally'); //finally 如果内部的异常没有处理抛给了外面,在外面处理之前要处理里面的finally顺序 } }catch(e){ console.log("outer", ex.message); // outer oops }finally{ console.log('finally'); //finally }
只要内部的异常没有处理抛给了外面,在外面处理之前要处理里面的finally顺序
try{ try{ throw newError "oops"; }catch(e){ console.log("inner", ex.message); // inner oops throw e; }finally{ console.log('finally'); //finally 只要内部的异常没有处理抛给了外面,在外面处理之前要处理里面的finally顺序 } }catch(e){ console.log("outer", ex.message); // outer oops }finally{ console.log('finally'); //finally }