深究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

相关文章

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>

js react 笔记 2

起因, 目的: 记录一些 js, react, css 1. 生成一个随机的 uuid // 需要先安装 crypto 模块const { randomUUID } = require('crypto');const uuid = randomUUID();console.log(uuid); // 输出类似 '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

uuid.js 使用

相关代码 import { NIL } from "uuid";/** 验证UUID* 为空 则返回 false* @param uuid* @returns {boolean}*/export function MyUUIDValidate(uuid: any): boolean {if (typeof uuid === "string" && uuid !== NIL) { //uuid