ECMAScript 语法定义的语句通常使用一个或多个关键字来完成给定的任务。
条件判断结构 if/ if…else/ if…else 嵌套
1 | if(条件表达式){ |
条件判断的嵌套
1 | if(条件表达式){ |
Switch语句
写法
1 | var mon=prompt("请输入月份"); |
注意:switch后边的变量和case后边值的数据类型必须保持一致。
While循环语句
语法:
1 | var n1; |
如果while后边的条件表达式为true,循环语句一直执行,直到while后边的条件表达式为false, 循环终止(跳出循环),使用while语句的时候,需在外边定义一个变量。
Do while 语句
语法
1 | do{ |
先执行do里循环代码,再和while后边的条件表达式进行判断,如果结果为true,继续执行do里的循环,结果为false,循环终止。比while多执行一次循环。
while语句 先判断后执行do while 语句 先执行后判断
for循环
语法
1 | for(var i=1; i<=100; i++){ |
break语句
单独使用 break 语句的作用是立即退出最内层的循环或 switch 语句。
语法:
1 | while(){ |
Break是跳出当前循环体;
continue语句
跳出循环一次。后边的代码不继续执行。
break 和 continue 的区别
- break跳出当前循环,执行循环后的语句
- continue跳出当前循环,继续执行循环
for-in 属性枚举语句
for-in
语句用来枚举对象的属性。
1 | for(variable in object){ |
variable 是一个变量名,也可以是一个可以产生左值表达式或者一个通过 var 语句声明的变量,每次循环都会计算 variable 这个表达式,也就是说每次循环它的值可能不同。for/in 循环并不会遍历对象的所有属性,只有”可枚举”的属性才会遍历到。内置对象的方法就是不可枚举的
label (标签)语句
label 语句可以在代码中添加标签,以便将来使用。通过给语句定义标签,就可以在程序的任何地方通过标签名引用这条语句。
1 | start: for(var i = 0; i < count; i++){ |
with 语句
with 语句的作用是将作用域设置到一个特定的对象中。如:
1 | var qs = location.search.substring(); |
return 语句
函数是一种表达式,所有的表达式都有值。函数中国的 return 语句既是指定函数调用后的返回值。因此,return 语句只能在函数体内部出现,而且 return 语句经常作为函数的最后一条语句出现,但并不是说一定要放在函数体的最后,即使在执行 return 语句的时候还有很多后续代码没有执行,这是函数也还会返回调用程序。
throw 语句
异常是指程序在程序在运行时发生的异常情况或错误时产生的一个信号。在 JavaScript 中,当产生运行时错误或者程序使用 throw 语句时就会显式的抛出异常。
try/catch/finally 语句
try/catch/finally 是 JavaScript 的异常处理机制。其中 try 从句中定义了需要处理的异常所在代码块,catch 从句跟在 try 后,当 try 块内发生了异常时,调用 catch 内的代码逻辑。catch 从句后跟随 finally 块,后者中国放置清理代码,不管是 try 块中是否产生异常,finally 块内的逻辑总是会执行。
1 | try { |
其它语句
debugger 语句
“use strict”
开启 ECMAScript 5 引入的一条命令,开启严格模式。说明后续的所有 JavaScript 代码都在严格模式下执行。
- 严格模式下禁止使用 with 语句
- 在严格模式下,所有的变量都要先声明;
- 严格模式中,调用的函数中的一个 this 值是 undefined ;
- 可以利用这种方式判断 JavaScript 实现是否支持严格模式
1 | var hasStrictMode = (function(){ |
- 在严格模式中,当通过 call() 或 apply() 来调用函数时,其中 this 值就是通过 call() 或 apply() 传入的第一个参数;
+(在非严格模式中,null 和 undefined 值被全局对象和转换为对象的费对象值所替代) - 在严格模式,给只读属性和给不可扩展的对象创建新成员都抛出一个类型错误异常。
+(在非严格模式中,这些操作只是简单地操作失败,不会报错) - 在严格模式下,传入 eval() 的代码不能在调用程序锁在的上下文中声明变量或定义函数
- 在非严格模式中是可以这样做的。
- 严格模式下,函数里的 arguments 对象拥有传入函数值的静态副本。
- 严格模式下,delete 运算符后跟随非法的标识符会抛出异常
- 严格模式下,试图删除一个不可配置的属性将抛出一个类型错误异常
- 严格模式下,在一个对象直接量中定义两个或多个同名属性将会产生一个语法错误
- 严格模式下是不允许使用八进制整数直接量
- 严格模式下标识符 eval() 和 arguments 当做关键字,它们的值是不能更改的。不能给这些标识符赋值。
- 严格模式中限制了对调用栈的检测能力,在严格模式的函数中,arguments.caller 和 arguments.callee 都会抛出一个类型错误异常。
- 严格模式的函数同样具有 caller 和 arguments 属性,当访问这两个属性时将会抛出类型错误异常。