深究js(六)——浅谈语句(语句Ⅰ)

2024-03-15 16:48
文章标签 js 浅谈 语句 深究

本文主要是介绍深究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 
    statement2
        expression是表达式,当表达式里的值为真的时候,才会执行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(六)——浅谈语句(语句Ⅰ)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/812621

相关文章

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

浅谈mysql的sql_mode可能会限制你的查询

《浅谈mysql的sql_mode可能会限制你的查询》本文主要介绍了浅谈mysql的sql_mode可能会限制你的查询,这个问题主要说明的是,我们写的sql查询语句违背了聚合函数groupby的规则... 目录场景:问题描述原因分析:解决方案:第一种:修改后,只有当前生效,若是mysql服务重启,就会失效;

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹