Node.js很是火爆,前段待遇好的飞起。。。。

于是我决定....

重头开始学习JavaScript
有些比较特别的,或者之前我们注意到,再或者容易出错
东西我会记录下来。

可选的分号

和其他许多编程语言一样,JavaScript 使用分号(;)将语句分隔开的。这对增强代码的可读性和整洁性非常重要。

缺少分割符,一条语句的结束就成了下一跳语句的开始,反之亦然。

在JavaScript中,如果语句个独自占一行,通常可以省略语句之间的分号(程序结尾或又花括号"}"之前的分号也可以省略)。

许多JavaSritpt程序员使用分号来明确语句的解释,即使在并不完全需要分号的时候也是如此。

我也建议大家这样做。

如下代码,

a=3;
b=4;
//因为两条语句用两行书写,第一个分号是可以省略掉的
a=3;b=4;
//如果在一行,第一个分号则不能省略

需要注意的是,JavaScript并不是所有的换行都要填补分号,只有缺少了分号就无法正确解析代码的时候,JavaScript才会填补分号。

var a
a
=
3
console.log(a)
//JavaScript将其解析为:
var a; a=3; console.log(a)

看如下的例子,

var y=x+f
(a+b).toString() //第二行的圆括号与第一行的f 组成一个函数调用
//JavaScript 会解析成 var y=x+f(a+b).toString();

而上面的代码本意却不是这样的。分号还是不要省略的好。

通常来讲,如果一条语句以 "("、"[" 、"/" 、"+" 或者 “-” 开始,那么它极有可能和前一条语句在一起解析。

以"/" 、"+" 或者 “-” 开始的语句并不常见,而以 "("、"["  开始的语句则非常常见,至少在一些JaveScript编码风格中是很普遍的。

有些程序员喜欢保守的在语句前加上一个分号,这样哪怕之前的语句被修改了、分号被误删除了,当前语句还是会正确解析:

var x=0 //这里省略了分号
;[x,x+1,x+2].forEach(console.log)//前面的分号保证了正确的语句解析

如果当前语句和下一行语句无法合并解析,JavaScript则在第一行后填补分号,这是通用的规则,但有两个例外。

第一个例外是在涉及return、break和continue语句的场景中。如果这三个关键字后紧跟着换行,JavaScript则会在换行处填补分号。

例如:

return
ture;
//JavaScript会解析成:
return ; true;
//而代码本意是这样的:
return true;

第二个例外是在涉及"++"和"--"运算符的时候。

这些运算符可以作为表达式的前缀,也可以当做表达式的后缀。

如果将其用作后缀表达式,他和表达式应当咋同一行。

否则,行尾将填补分号,同事""++或"--"将会作为下一行代码的前缀操作符并与之以前解析。

例如:

x
++
y
//这段代码解析为" x;++y"而不是 "x++;y"

最后还是提醒大家 使用分号来明确语句的解释,即使在并不完全需要分号的时候也是如此。

如果你觉得有点用处还请推荐一下。

【JavaScript 从零开始】 语言核心部分----可选的分号的更多相关文章

  1. 第一章:Javascript语言核心

    本节是javascript语言的一个快速预览,也是本书的第一部分快速预览. 读此书之前,感谢淘宝技术团队对此javascript核心的翻译,感谢弗拉纳根写出此书.感谢你们无私的分享,仅以此笔记献给你们 ...

  2. JavaScript基础---语言基础(1)

    写在前面: 通过四篇博客把JS基础中的基础整理一下,方便自己查阅,这些内容对于实际项目开发中也许并不会在意,但是作为JS的语言基础,自觉还是应该熟悉.在完成这三篇博客(JavaScript基础---语 ...

  3. JS 语言核心(JavaScript权威指南第六版)(阅读笔记)

    前言: 对于程序员,学习是无止境的,知识淘换非常快,能够快速稳固掌握一门新技术,是一个程序员应该具备的素质.这里将分享本人一点点不成熟的心得. 了解一门语言,了解它的概念非常重要,但是一些优秀的设计思 ...

  4. JavaScript语言核心--词法结构

    编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序.作为语法的基础,它规定了诸如变量名是什么样的.怎么写注释,以及程序语言之间如何分隔等规则. 1. 字符集 JavaScript程 ...

  5. JavaScript语言核心之词法结构

    编程语言的词法结构是一套基础性规则,用来描述如何使用这门语言来编写程序.作为语法的基础,它规定了诸如变量名是什么样的.怎么写注释,以及程序语句之间如何分割的等规则. 1.1字符集 JavaScript ...

  6. 第一部分 JavaScript语言核心(二)

    第四章 表达式和运算符 P66 运算符优先级,从上到下: p68 属性访问表达式和调用表达式的优先级比运算符优先级都要高,eg: typeof my.functions[x](y) //typeof在 ...

  7. 《JS权威指南学习总结--1.1语言核心》

    1.1语言核心 --本节主要介绍<js权威指南>基础部分各章讲解内容和一些简单的示例 本小节内容: 一.第二章讲解js注释.分号和Unicode,第三章主要讲解js变量和赋值 简单示例: ...

  8. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  9. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

随机推荐

  1. “System.Runtime.InteropServices.COMException”类型的第一次机会异常在 System.Windows.Forms.dll 中发生

    最近做一个winform项目,在里面用了webbrowser控件进行html文档打印,遇到了标题所示问题.根据查到的一些资料,在调试>异常>查找中输入“System.Runtime.Int ...

  2. westrac server security configure user info

    security userkey:westracpass:Set#@!123

  3. s11 day 101 python Linux环境安装 与路飞项目支付功能

    from django.conf.urls import urlfrom django.contrib import adminfrom app01 import viewsurlpatterns = ...

  4. 程序猿的日常——JVM内存模型与垃圾回收

    Java开发有个很基础的问题,虽然我们平时接触的不多,但是了解它却成为Java开发的必备基础--这就是JVM.在C++中我们需要手动申请内存然后释放内存,否则就会出现对象已经不再使用内存却仍被占用的情 ...

  5. Waiting for possible shutdown message on port 4445

    如果用jmeter通过命令行(无图形界面)执行测试脚本,可参见jmeter最简单使用,并且启动多个jmeter实例,肯定会报地址端口已占用: Waiting for possible shutdown ...

  6. Swift 里字符串(十)修改字符串

    以append操作为例 public mutating func append(_ other: String) { if self.isEmpty && !_guts.hasNati ...

  7. iOS-电池图标【结合贝塞尔曲线控制电量显示】

    基于UIView类:WKJBatteryView WKJBatteryView.h #import <UIKit/UIKit.h> @interface WKJBatteryView : ...

  8. SQLAlchemy 代码学习

    1.Dialect:英文含义为方言,这边只模块对不同的数据库的连接以及操作的实现. 2.engine:引擎,代表到数据库的一个连接,数据库自身有一个连接最大限制,不能超过这个限制.这里引擎可以连接多个 ...

  9. Postman—authorization简介

    Postman中的authorization 版权声明,参考: https://blog.csdn.net/qq_28284093/article/details/80416749 1.概述 Auth ...

  10. libnetwork插件化网络功能

    Docker把网络跟存储这两部分的功能实现都以插件化形式剥离出来,允许用户通过指令来选择不同的后端实现.这也是Docker希望构建围绕着容器的强大生态系统的一些积极的尝试.剥离出来的独立容器网络项目叫 ...