表达式在JS中是短语,语句(statement)是JS的整句或命令。
诸如赋值和函数调用这些表达式,称做为表达式语句,还有声明语句,条件语句等。
表达式语句
赋值语句是比较重要的表达式语句:
greeting = "Hello" + name;
i *= 1;
复合语句和空语句
可以用逗号运算符将几个表达式连接在一起,形成一个表达式。还可以将多条语句联合在一起,形成一条复合语句,只须用花括号将多条语句括起来即可。
{
x = Math.PI;
cx = Math.cos(x);
}
空语句
允许包含0条语句的语句,
;
声明语句
var 和 function 都是声明语句,它们声明或定义变量或函数。
var
var 语句用来声明一个或者多个变量。
关键字var之后跟随的是要声明的变量列表,列表中的每一个变量都带有初始化表达式,用于指定它的初始值。例如:
var i ; //一个简单的变量
var j = 0; //一个带有初始值 的变量
var p,q; //两个变量
var greeting = "hello" + name; //复杂的初始化表达式
var x = 2.34,y = Math.cos(0.75),r,theta; //很多变量
var x = 2, y = x*x; //第二个变量使用了第一个变量
//更多变量,每个变量占一行
var x =2,
f = function(x) { return x*x },
y = f(x);
function
用来定义函数。格式如下:
function funcname([arg1 [,arg2 [...,argn]]]) {
statements
}
函数体用花括号括起来 {}。
简单例子:
function hypotenuse(x,y) {
return Math.sqrt(x*x + y*y);
}
//递归函数
function factorial(n) {
if(n<1) return1;
return n*factorial(n-1);
}
条件语句
条件语句是通过判断指定表达式的值来决定执行还是跳过某些语句。这些语句是代码的‘决策点’,有时候称为‘分支’。
if
else if
代码中有多条分支的时候使用else if
if(n == 1) {
//执行代码块1
}
else if(n == 2) {
//执行代码块2
}
else if(n == 3) {
//执行代码块3
}
else {
//之前的条件都为false,则执行代这里的代码块4
}
switch
switch(expression) {
statements
}
以下例子根据值的类型将该值转换为字符串:
function convert(x) {
switch (typeof x) {
case 'number':
return x.toString(16);
case 'string':
return '"' + x + '"';
default:
return String(x);
}
}
循环
while do/while for for/in
while
while也是一个基本的循环语句
while循环输出0~9的值:
var count = 0;
while(count < 10) {
console.log(count);
count ++;
}
在这个例子中,变量count的初始值 是0,在循环执行过程中,它的值每次都递增1。当循环执行了10次,表达式的值就变成了false.
do/while
它是在循环的尾部而不是顶部检测循环表达式,这就意味着循环体至少执行一行。语法如下:
do
statement
while (expression);
function printArray(a) {
var len = a.length,i=0;
if(len == 0)
console.log("Empty Array");
else {
do{
console.log(i);
}while(++i < len);
}
}
for
for大部分都具有特定的计数器变量。计数器的三个关键操作是初始化,检测和更新。
//语法结构
for (initialize; test ; increment)
statement
for循环的三个表达式任何一个都可以忽略。但是两个分号必须要有。如果省略test,则会是个死循环。
for in
for(variable in object)
statement
for( var i = 0; i < a.length; i++){ //i代表了数组元素的索引
console.log(a[i]); //输出数组中的每个元素
}
for(var p in o) {//将属性名字赋值给变量p
console.log(o[p]);// 输出每一个属性的值
}
以上例子都是循环输出,两种书写方式。
跳转
break continue return throw
break 语句是跳转到循环或者其他语句的执行并开始下一次循环的执行。
continue 语句是终止本次循环的执行并开始下一次 的循环。
return 语句让解释器跳出函数体的执行,并提供本次调用的返回值。
throw语句触发或者抛出一个异常。
break
for( var i = 0; i < a.length; i++){ //i代表了数组元素的索引
if(a[i] == target) break();//如果找到了需要查找的数组元素,则使用break语句退出循环
}
continue
下面例子展示了 当一个错误的时候跳过当前循环的后续逻辑:
for( var i = 0; i < data.length; i++){
if(!data[i]) continue; //不能处理的undefined数据
total += data[i];
}
return
函数调用都是一种表达式,而所有的表达式都有值。函数中的return语句既是指定函数调用后 的返回值。
function square(x) {
return x*x; //一个包含return语句的函数
var a = square(2); // 4
}
throw
所谓异常是当发生了某种异常情况或错误时产生的一个信号
function factorial(x) {
//如果输入参数是非法的,则抛出一个异常
if( x < 0) throw new Error ("x不能是负数")
};
//否则,计算出一个值,并正常地返回它
for (var f = 1; x > 1; f *= x, x--) /*empty*/;
return f;
try/catch/finally
try/catch/finally语句是 JS 的异常处理机制。
try从句定义了需要处理的异常所在的代码块。
catch从句跟随在try从句之后,当try块内的某处发生了异常时,调用catch内的代码逻辑。
finally从句跟随在catch之后,不管try块中的是否产生异常,finally块内的逻辑总会执行。
finally不是经常使用到。
代码:
try{
//要求用户输入一个数字
var n = Number (prompt("请输入一个正整数"," "));
//假设输入是合法的,计算这个数的阶乘
var f = factorial(n);
//显示结果
alert( n + " != " + f);
}
catch(ex) {
//如果输入不合法,将执行这里的逻辑
alert(ex); //告诉用户产生了什么错误
}
with debugger use strict
with
with语句用于临时扩展作用域链。
with (object)
statment
document.forms[0].address.value
with (document.forms[0]) {
//直接访问表单的元素,例如
name.value = "";
address.value = "";
email.value = "";
}
debugger
这条语句用来产生一个断点
use strict
使用use strict 指令的目的是说明后续 的代码将会解析为严格代码
在严格模式中,给只读属性赋值和给不可扩展的对象创建新成员都将会抛出一个类型异常(这些在非严格模式中,只是操作失败,不会报错)
在严格模式中,传入eval()的代码不能在调用程序所在的上下文中声明变量或定义函数
在严格模式中,函数里的arguments对象拥有传入函数值 的静态副本。
在严格模式中,当delete运算符后跟随非法的标识符(比如变量、函数、函数参数)时,将会抛出一个语法错误
在严格模式中,不允许使用八进制整数直接量
在严格模式中,标识符eval和arguments当做关键字,它们的值是不能更改的
在严格模式中,限制了对调用栈的检测能力
JS语句小结: