二.可选的分号

2024-03-11 18:12
文章标签 可选 分号

本文主要是介绍二.可选的分号,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

与很多编程语言一样,Javascript使用(;)分隔语句。这对于保持代码清晰很重要:如果没有分隔符,一条语句的结尾可能是另一条语句的开头,反之亦然。在Javascript中,如果两条语句分别写在两行,通常可以省略它们之间的分号。另外在程序末尾,如果接下来的记号是右花括号},那么也可以省略分号。很多Javascript程序员(包括本书中的代码示例)使用分号明确标识语语句结束,即便这些分号并非必须。另一种风格是尽可能省略分号,只在少数必要情况下才用。无论使用哪种风格,都需要了解一些关于Javascript中可选分号的细节。

来看下面的代码。因为两条语句位于两行,所以第一个分号可以省略:

a = 3;

b = 4;

然后,像下面这样写,分号就是必需的:

a = 3; b = 4;

注意,Javascript并非任何时候都把换行符当作分号,而只是在不隐式添加分号就无法解析代码的情况下才这么做。更准确的讲(除了稍后介绍的第三种例外情况),Javascript只在下一个非空格字符无法被解释为当前语句的一部分时才把换行符当作分号。来看下面的代码:

let a
a
=
3
console.log(a)

Javascript将以上代码解释为:

let a;a=3;console.log(a);

 

之所以把第一个换行符当作分号,是因为如果没有分号,Javascript就无法解析代码let a a。第二个本身是一条独立的语句,但Javascript并没有把第二个换行符当作分号,因为它还可以继续解析更长的语句 a = 3;。

 

因为它还可以继续解析更长的语句 a = 3;。

这些语句终止规则会导致某些意外情形。以下代码看起来是两条位于两行的语句:

  let y = x + f

  (a + b).toString()

但第二行的圆括号可以被解释为第一行f的函数调用,所以Javascript将这两行代码解释为:

  let y = x + f(a+b).toString();

而这很有可能不是代码作者的真实意图。为了保证代码被解释为两条语句,这里必须要明确添加加一个分号。通常,如果语句以(、[、/、+或-开头,就有可能被解释为之前语句的一部分。实践中,以/、+和-开头的语句极少,但以(和[开头的语句则并不鲜见,至少在某种Javascript编程风格下经常会看到。有的程序员喜欢在所有这种语句前面都防御性地添加一个分号,这样即使它前面的语句被修改,删掉了之前末尾的分号,也不会影响当前语句:

        let x = 0 // 这里省略分号

        ;[x,x+1,x+2].forEach(console.log) // 防御:保证这条语句独立

Javascript在不能把第二行解析为第一行的连续部分时,对换行符的解释有第三种例外情况。第一种情况涉及return、throw、yield、break和continue语句(参见第5章),这些语句经常独立存在,但有时候后面也会跟一个标识符或表达式。如果这几个单词后面(任何其他标记前面)有换行符,Javascript就会把这个换行符解释为分号。例如,如果你这么写:

        return

        true;

Javascript 假设你的意图是:

        return; true;

但你的意图可能是:

        return true;

这意味着,一定不能在return、break或continue等关键字和它们后面的表达式之间加入换行符。如果加入了换行符,那代码出错后的调试会非常麻烦,因为错误不明显。

第二种例外情况涉及++和--操作符(参见4.8节)。这些操作符既可以放在表达式前面,也可以放在表达式后面。如果想把这两个操作符作为后置操作符,那它们必须与自己操作的表达式位于同一行。第三种例外情况涉及使用简洁的“箭头”语法定义的函数:箭头=>必须跟参数列表在同一行。        

这篇关于二.可选的分号的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

初探swift语言的学习笔记二(可选类型?和隐式可选类型!)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/28904115 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! 可选类型、隐式可选类型 在swift中,可选类型其根源是一个枚举型,里面有None和Som

shell语法中的空格和分号,引号

分号: 分号是多个语句之间的分隔符号,当只有一个语句的时候,末尾无需分号,最后一个语句后面也无需分号。 空格详解: 1.定义变量时, =号的两边不可以留空格 gender=femal————rightgender =femal———–wronggender= femal———–wronggender= test————right 左边是命令的话=号的右边有空格是正确的=左边不能有空格

某环境已无法登录,但对应角色还在可选角色列表中,如何删除

某环境已无法登录,但对应角色还在可选角色列表中,如何删除 删除不需要的角色,尽管我们不能访问对应的环境解决方案 删除不需要的角色,尽管我们不能访问对应的环境 前一段时间,参加master class课程,用了一个环境的账号,现在账号到期了,不能访问,但是角色一直在自己的角色列表中,让操作有点不爽。 Parker’s Brand Shop的环境被禁用了,但是角色一直在,所以想删

第2章 Rust初体验8/8:末尾不带分号的表达式即代码块返回值:更简洁的语法:猜骰子冷热游戏

讲动人的故事,写懂人的代码 2.9 故事7: 玩家输入的数字若越界则继续猜 贾克强:“我们终于要一起写这个游戏的最后一个故事啦!游戏中,你需要猜两个骰子的点数之和,因此你猜的数字应该在2到12之间。我们可以在代码中加入一些判断逻辑,如果你猜的数字超出了这个范围,游戏会友好地提醒你,并请你继续猜。这个故事中的Rust代码又有一个新的知识点,所以我来帮你们写吧。“ 2.9.1 Rust版

hibernate学习笔记--可选的配置属性

3.4.  可选的配置属性 有大量属性能用来控制Hibernate在运行期的行为. 它们都是可选的, 并拥有适当的默认值. 警告: 其中一些属性是"系统级(system-level)的". 系统级属性只能通过java -Dproperty=value或 hibernate.properties来设置, 而不能用上面描述的其他方法来设置.  在文档

【SQLAlChemy】常见的数据类型有哪些,Column可选的参数有哪些呢?

常见数据类型与Column参数 常见类型 Integer:整数类型,对应数据库的 int 类型。Float:浮点数类型,对应数据库的 float 类型。它占用 32 位空间。Double:双精度浮点数类型,对应数据库的 double 类型,占用 64 位空间。需要注意的是在 SQLAlchemy 中没有 Double 类型。String:可变字符类型,对应数据库的 varchar 类型。Boo

【Python】一篇文章学会def定义函数的可选参数,默认参数,有默认值的可选参数(保姆级注释)

目录 API说明:固定参数例程默认参数例程可选参数元组例程有默认值的可选参数r例程综合例程全文代码合集总结 欢迎关注 『Python』 系列,持续更新中 欢迎关注 『Python』 系列,持续更新中 函数封装是进阶的重要内容,本文介绍了def定义函数的可选参数,默认参数。 API说明: def 函数名(q,w=10,*e,r=None): 固定参数q,默认参数w

nc6单据模板设置没有可选的模板问题解决

nc6单据模板设置没有可选的模板问题解决 在单据功能节点默认模板里面选到相应的模板,点击增补到集团 效果图:

python argparse中action的可选参数store_true的作用

# test.pyimport argparseif __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument("--test_action", action='store_true')args = parser.parse_args()action_val = args.test_actionpri

【hdu5716】带可选字符的多字符串匹配

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem Description 有一个文本串,它的长度为m(1≤m≤2000000),现在想找出其中所有的符合特定模式的子串位置。 符合特定模式是指,该子串的长度为n(1≤n≤500),并且第i个字符需要在给定的字符