本文主要是介绍深究js(六)——浅谈语句(语句Ⅰ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在JavaScript中,语句的作用是告诉浏览器该做什么,相当于一个指令。一条语句通常都是以分号来结尾的。在JavaScript中,比较常见的语句有表达式语句、复合语句、空语句、声明语句、条件语句、循环语句、跳转语句还有其他的一些语句。语句这个篇章我打算分五个部分来讲,这个是第一部分。下面我来讲循环语句之前的所有语句。
一、表达式语句
何为表达式语句。就是使某件事发生的一个方法是计算带有副作用的表达式,比如说赋值和函数调用这些有副作用的表达式。常见的赋值类型的语句,如:
var a = 1;这个就是一条语句。再如其他的一些运算符组成的表达式也可以成为一条语句,如“++”、“--”等运算符。或者可以通过函数调用的方式来得到一条语句,如:
alert(a);alert()函数是window对象里的一个属性,在这里也属于一条语句。
二、复合语句
在之前的文章中,讲到表达式的时候有复杂表达式,复杂表达式就是通过多个逗号来形成的。而在这里,复合语句通过多个“;”和一对花括号来组成,通常这样子组成会形成一个语句块。如:
{x = 1; y = 2; }常见的语句块比如条件语句、函数表达式等等。在语句块中,子语句的结尾必须有分号,并且,这个语句块是没有块级作用域,除了某些特定的,如函数表达式。当然,可能你第一眼看见语句块的时候,会以为这个好像对象字面量。其实这两个东西还是有区别的。如下面这个就是一个对象字面量:
({toString:function(){return "hehe"}}) + "...";在这里,对象字面量通过括号括起来來控制它的范围,当运行时,因为加号的缘故,所以这个对象字面量会转换成字符串,所以在控制台会返回“here,,,”这个东西出来。但是如果是这样的话;
{toString:function(){return "hehe"}}在控制台运行时就会报错,虽然好像有toString这个变量名,但是它本身变量名,它只是一个标签,关于标签下面会讲到,这里先不讲。并且这条语句里,函数声明语句没有函数名,也没有赋值给一个变量,所以它会报错。正确的做法是:
{toString:function f(){return "hehe"}} //或者下面的 {toString:var a = function () {return "here"}}函数声明语句会在等一下讲到。现在讲的是空语句。
三、空语句
空语句比较简单,什么都不写,只需加一个分号就可以了。如:
;
这个我们一般用在循环语句中,因为在JavaScript中,循环体必须至少包含一条语句,当不想写表达式的时候,就可以通过这样来完成一个语句,如;
for (i = 0; i<a.length; a[i++] = 0) ;这样就不会报错。
四、声明语句
在声明语句中,通常有用var和function声明的,它们声明或定义变量或函数。这些语句定义标识符(变量名和函数名)并赋值,这些标识符可以在程序的任何地方使用。下面我们来讲一下var和function。
var语句可以用来声明一个或多个变量,如:
var a = 1;如果声明的变量在函数体内,则这个变量是局部变量,它的作用域就是这个函数。如果在顶层代码中声明,则是全局变量,全局变量是全局对象的属性。var声明的变量是不能用delete操作符删除的。当用var声明了一个变量但是没有赋值,则初始化的值是underfined。var声明的变量会提前到脚本或者函数的顶部,这个在之前有讲过,称为声明提前,但是也只是它的声明提前,它的赋值不会提前,只会运行到赋值的时候变量才会得到新值。值得注意的是,多次声明同一个变量只会调用最后声明的变量。
关键字function是用来定义函数,但除此以外也可以写成语句,常见的函数语句有两种写法,一种是写一个匿名函数将其赋给一个变量,另一个是function加函数名加小括号加花括号,这两种写法如下所示:
var a = function () {return "a" } function b() {return "b" }小括号是参数列表,在外部调用的时候可以填入实参,然后函数内可以使用这些参数。在定义函数的时候,并不执行函数体内的语句,它和调用函数时待执行的新函数对象相关联。比如上面的例子中,可以在代码后面加上a()和b()语句就可以执行a函数和b函数。现在有一个思考,仍然以上面代码为例子,如果我调用a、b函数都是在这两个函数之前,会发生什么样的结果呢?代码如下:
alert(a) alert(b()) var a = function () {return "a" } function b() {return "b" }我们运行这个代码可以看到,第一个语句输出的是underfined,第二个输出的是b,这是为什么呢?原来我们用var声明一个函数的时候,只是它的变量提前了,但是变量初始化的代码没有提前,也就是说,在执行到第三行代码前,变量a还是underfined。但是函数b就不同了,函数b的函数名是一个变量名,这个变量名指向的是函数对象,所以它的变量声明提前,他的整个代码也提前了,提前到脚本或者函数的顶部,因此在整个脚本或者函数内可见。
五、条件语句
条件语句是通过判断指定表达式的值来决定执行还是跳过某些语句,这些语句是代码的“决策点”,有时称为“分支”。常见的有“if”、“else if”和“switch”,下面慢慢介绍。
if语句是一种基本的控制语句,让程序可以选择执行的路径。一般有两种写:
if (expression)statement //或者下面 if (expression)statement1 else statement2expression是表达式,当表达式里的值为真的时候,才会执行statement,否则则跳过if,有else语句则执行else语句,没有则执行下一句代码。常见的假值有:null、underfined、false、0、空字符串和NaN。注意,if关键字和带圆括号表达式后面必须跟随一条语句,如果只有一条语句,可以不加花括号,否则则要加花括号。else语句的匹配规则是就近与if语句匹配,下面是个错误的例子:
i = j = 1 k = 2 if (i == j)if (j == k)console.log("1") else console.log("2")可能有些人以为答案是没有东西输出,但是认真的发现,结果是2。这是因为else会就近的与if语句匹配,在机器眼里,这段代码是这样的:
if (i == j) {if (j == k)console.log("1")else console.log("2") }所以关键的时候还是要用花括号来隔开,从而让代码层次更加的清晰。
除此以外还有else if语句。else if语句在后面的圆括号内写判别的表达式,同if语句差不多else if语句同上面的if语句通常是合在一起用,如:
if (expression)statement1 else if (expression)statement2 else statement3用法和if语句没太大区别,这里不详细讲。
最后讲一个switch语句。当所有的分支都依赖于同一个表达式的值时,我们可以不用else if这么繁琐,我们可以用switch语句。switch语句后面的圆括号写的是表达式,在代码块内,有多个case和一个default,case后面跟的是一个值,当表达式的值等于case后面的值时,则执行这条语句,之后break跳出switch,否则则在默认default中跳出,如:
switch (n) {case 1:console.log(1)break case 2:console.log(2)break case 3: console.log(3)break default:console.log(0)break }这里关于switch语句有几点是需要提的。第一是switch表达式的值与case的值比较的运算符是恒等于号,也就是说比较的时候不会发生类型转换。第二是每个case语句和default语句的结尾处一定要加上break,不然会一直执行后面的代码。第三,如果switch中没写default语句,则整个表达式中没有符合的值话,会直接跳出整个switch。default语句是最后执行的,所以即使default语句写在最前面也不影响。最后要说的是,由于JavaScript的switch语句的运行原理和java、c++的不同,JavaScript的case表达式的值是在运行时计算的,所以JavaScript的switch语句的效率非常的低,能不用的时候尽量避免使用。
这篇关于深究js(六)——浅谈语句(语句Ⅰ)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!