JS学习第七天----语句

语句

前面说到,表达式在JS中是短语,表达式的作用是啥来?==>得到一个值,不控制程序的执行情况,那么语句就是JS整句或命令.增乳英文使用句号结尾来分隔语句,JS语句是以分号结束.

具体来说,表达式计算出一个只,语句用来执行以使某件事发生.

“使某件事发生”的一个方法使计算代有副作用的表达式.诸如赋值和函数调用这些有副作用的表达式,是可以作为单独的语句的,这种把表达式当做语句的用法也称为表达式语句.类似的语句还有声明语句,声明语句用来声明新变量或定义新函数.

JS程序无非就是一系列可执行语句的集合.默认情况下,JS解释器依照语句的编写顺序依次执行.另一种”使某事发生”的方法是改变语句的默认执行顺序.JS中有很多语句和控制结构来改变语句的默认执行顺序:

条件语句,循环语句,跳转语句

 

 

表达式语句:

表达式语句是JS中最简单的:

greeting=”hello”+name;

i*=3;

count++;

以上这些都是简单的赋值语句.赋值语句是一类比较重要的表达式语句.

delete运算符一般作为渔具使用,而不是复杂表达式的一部分.

delete o.x;

函数调用是表达式语句的另一个大类:

alert(“hello,JS”);

window.close();

 

 

 

复合语句和空语句

JS中可以将多条语句联合在一起,形成一条复合语句,只须用花括号将多条语句括起来:

{

x=Math.PI;

cx=Math.cos(x);

}

这样的语句块有几点需要注意的:

1.语句块的结尾是不需要分号的

2.JS没有块级作用域,所有在语句中声明的变量并不是语句块私有的.

 

JS,当希望多条语句被当做一条语句使用时,使用复合语句来代替.空语句则恰好相反,它允许包含0条语句.空语句如下:

;

你没看错,就是只有一个分号,别怀疑我打错了,哥哥我复制的书上的,怎么可能打错了.

空语句有时候很有用处,例如:

for(i=0;i<a.length;a[i++]=0);//(登起你的眼睛来,这里一个大分号!)

这里需要注意的是,for循环中,while循环或if语句在右圆括号后面的分号很不起眼,这很可能造成一些致命的错误,而且这些错误很难定位,例如:

if((a==0)||(b==0)); //这行代码实际上什么也没做

0=null;//这行代码总会执行.

 

 

声明语句

varfunction都是声明语句

var语句用来声明一个或多个变量,,声明的可以滴啊有初始化表达式,用于指定变量的初始值,例如:

var i;

var j=0;

var p,q;

var greeting=”hello”+name;

var x=2;y=x*x;

如果var语句出现在函数体内,那么它定义的是一个局部变量,其作用域就是这个函数,如果再顶层代码中使用了var语句,他生命的是全局变量,在整个JS的程序中都是可见的.全局变量是全局对象的属性.然而和其他全局对象属性不同的是,var声明的变量是无法通过delete删除的.

 

如果var语句中的变量没有指定初始化表达式,那么这个变量的初始值就是undefined,变量在声明他们的脚本或者函数中都有定义的,变量声明语句会被”提前”至脚本或者函数的顶部.单数初始化的操作还是在原来var语句的位置执行,在声明语句之前变量的值是undefined.例如:

for(var i=0;i<10;++i); //var i;会被提前到整个函数的顶部

 

function用来定义函数.例如:

var f=function(x){return x+1;}//强表达式赋值给一个变量

function f(x){return x+1;}//含有变量名的语句

 

 

条件语句

条件语句是通过判断指定表达式的值来决定执行还是条狗某些语句.

介绍一下JS基本条件语句,例如switch,if/else

if语句是一种基本的控制语句,这种语句有两种形式:

第一种:

if(判断条件)

{代码}

在这种形式中,需要计算判断条件的值,如果计算结果为真值,那么就执行大括号中的代码.如果判断条件的结果为假,则不执行.

第二种:

if(expression)

statement1

else

statement2

第二种形式引进了else从句,expression的值为false的时候,执行else中的逻辑.

和大多数编程语言一样,JSif,else总是和就近的if语句匹配.

 

if/else语句通过判断一个表达式的计算结果来选择执行两条分支中的一条.当代吗有多条分支的时候,一种解决办法就是使用else if语句.else if语句并不是真正的JS语句,它只是多条if/else语句连在一起的一种写法.

if(n==1)

{

执行代码块1

}

else if(n==2)

{

执行代码块2

}

else if(n==3)

{

执行代码块3

}

else

{

之前的条件都为false,则执行这里代码块4

}

 

像这样的有多条分支情况,else if不是最佳的解决方案.switch语句正适合处理这种情况,\.关键字switch之后紧跟着圆括号括起来的一个表达式,随后是一对花括号括起来的代码块:

switch(expression){

statements

}

switch语句的完整语法要复杂一些,代码中可以使用多个由case关键字标识得到代码片段,ccase之后是一个表达式和一个冒号,当执行这条seit成语句的时候,他首先计算expression的值,然后查找case子句的表达式是否和expression的值相同(按照”===”比较).如果找到匹配的case,那么将会执行这个ccase对应的代码块.如果找不到匹配的case,那么将执行default标签的代码.

 

注意的是,通常情况下case语句结尾处使用关键字break;break;语句可以使解释器跳出seitch或循环句.如果没有break语句,那么switch语句就会从与expression的值相匹配的case标签处的代码开始执行,一次执行后续的语句.

如果switch表达式与所有的case表达式都不匹配,则执行标志为default的语句块,如果没有default标签,switch的整个语句块都将跳过.

 

 

循环

循环语句就是程序的一个回路,可以让一部分代码重复执行.JS中有四种循环:while,do/while,forfor/in

while语句是一个基本的语句,他的语法如下:

while(expression)

statement

在执行while渔具之前,JS解释器首先计算expression的值,如果他的值为假,那么程序就跳过循环体重的逻辑statement转而执行程序中的下一个语句.反之,则执行statement.

通常来说,我们并不想让JS反复执行同一个操作.在每一次循环中,都有一个或多个变量随着循环的迭代而改变,如果这些变量在expression中用到,那么每次循环表达式的值也不同.这点很重要.

 

循环最常用的用法就是用来遍历数组,例如:

var a[10] ={1,2,3,4,5,6,7,8,9,0};

var i=0;

while(i<10)

{

console.log(a[i]);//这句话不明白没事,你执行一下就明白了

i++;

}

 

do/while循环和whhile循环非常相似,只不过他是在循环的尾部而不是在顶部检测循环表达式,这就意味着循环体至少会执行一次:

do

statement

while(expression)

do/while并不常用.

 

for语句提供了一种比while语句更加方便的循环控制结构.语法:

for(初始化;条件;改变初始条件)

statement

你应该能看出来,其实for循环更加适合遍历数组,你看:

for(var i=0;i<10;i++)

{

console.log(a[i]);

}

最后一个for/in语句也是使用for 关键字,但是它和常规的for循环是完全不同的一类循环.语法:

for(variable in object)

{

statement

}

variable通常是一个变量的名,也可以是一个可以产生左值的表达式或一个通过var语句声明的变量,object是一个表达式,这个表达式结算的结果是一个对象.for/in循环用来方便的遍历对象属性成员:

for(var p in o)

{

cconsole.log(o[p]);

}

for/in语句并不会遍历对象所有属性,只有”可枚举”的属性才会遍历到.JS语言核心锁定一定额内置方法就是”不可枚举的”,例如所有对象都有方法toString().

 

 

跳转

JS中另一个语句是跳转语句.例如break语句是跳转到循环或者其他语句的结束.continue语句是终止本次循环的执行并开始下一次循环的执行.JS中的语句可以明明或带有标签,breakcontinue可以标识目标循环或者其他与巨标签.

return语句让解释器跳出函数体的执行,并提供本次调用的返回值.throw语句触发或者抛出一个异常,它是与try/catch/finally语句一同使用的.

语句是可以条件标签的,标签是由语句前的标识符和冒号组成:

identifier:statement

JS中允许break关键字后面跟随一个语句标签:

break labelname;

break和标签一块使用时,程序就跳转到这个标签所标识的语句块的结束,或者直接终止这个闭合语句块的执行.如果没有这个闭合语句块,就会产生一个语法错误.单独使用break语句的作用是立即退出最内层的循环或者switch语句.如果希望通过break来跳出非就近的循环体或者switch语句时,就会用到带标签的break语句.

continue语句和break语句非常类似,但他不是退出循环,而是转而执行下一次循环.

 

函数中的return语句即是指定函数调用后的返回值.

return expression;

return语句只能出现在函数体内.如果没有return语句,调用表达式的结果就是undefined.

JS,当产生运行时错误或者程序使用throw语句就会显示的抛出异常.使用try/catch/finally语句可以捕获异常.

throw语句的语法:

throw expression;

expression的值可以是任意类型,JS解释器抛出异常的时候通常采用Error类型和其子类型,例如:

function factorial(x){

if(x<0)

throw new Error(“负数是不可以滴”);

for(var f=1;x>1;f*=x.x--);

return f;

}

Error中有几个比较重要的属性,比如name指的是错误的名称,message指的是错误的信息,,stact是指错误发生时调用堆栈.

常见的集中Error类型:

SyntaxError: 语法错误,无法通过解释器RangeError: 数值超出范围TypeError: 变量的类型不是预期的ReferenceError: 引用不可用

当抛出异常时,JS解释器会理解停止当前正在执行的逻辑,并跳转到就近的异常处理程序.异常处理程序使用try/catch/finally语句的catch从句编写的.

 

try/catch/finally语句是JS的异常处理机制.其中try从句定义了需要处理的异常所在的代码块.catch从句跟随在try从句之后,try块内某处发生了异常时,调用catch内的代码逻辑.catch从句后跟随finally,后者中放置清理嗲吗.不管try块中是否产生异常,finally块内的逻辑总是会执行.

 

其他语句

这里谈论三种JS语句,with,debuggeruse strict

with语句用于临时扩展作用域链,语法:

with(object)

statement

这条语句将object添加到做御用链的头部,然后执行statement,最后把作用域链恢复到原始状态

一般不推荐with语句.但是可以使用with语句来简化代码编写.例如:

with(document.forms[0]){

name.value=””;

address.value=””;

email.value=””;

}

debugger语句用来产生一个断点,嗲吗的执行会停在短点的位置,这时使用调试器来输出变量的值.

这些语句并不常用,看看就行,别把太多时间浪费在语法上,孔乙己知道茴香豆的茴字有四种写法,有意义吗?故意你明白我的意思.

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值