JavaScript语法中分号使用的细节

关于JavaScript中可选分号的问题有几个细节要注意:

一般来说,JavaScript和其他语言一样都是使用分号,将语句隔开,但在JavaScript中,如果语句各自独立一行,有时也可以省略分号的

细节1

如果当前语句和随后的非空格字符不能当成一整体来解析的话,JavaScript就在当前语句行结束处自动填补分号

var a

a

=

3

console.log(a);

JavaScript将上述代码解析为:

var a;

a=3;

console.log(a);

  • 第一行代码 var a自动添加分号var a;,因为如果不添加分号JavaScript不能把var a a当成一个整体来解析

  • 第二行a可以单独当一条语句(a;),但对比解析代码,发现其实JavaScript并没有给a填补分号,而是和第三行内容一起解析(a=3;)

但上面的自动填补规则却有2个例外情况:

例1.涉及return、break、continue语句中,不能有换行 

function suibian(){

return

ture;

}

console.log(suibian());

JavaScript会解析为:

function suibian(){

return;

ture;

}

console.log(suibian());

当javascript解析到return时会自动的在这段语句后面加分号,从而导致了console.log(suibian());所需要的值为underfined(空),

而代码的本意是:

function suibian(){

return ture;

}

console.log(suibian());

而我们所需要表达的意思是:当javascript解析到return
true;时会自动的在这段语句后面加分号,所以我们需要输出的值得到了函数传过来的值true,最后打印出true;

2.涉及”++”、”--”运算符,如果要将其用做后缀表达式,运算符和表达式必须同一行

function suiyi(x,y){

x

++

y

return x+‘ ‘+y

}

console.log(suiyi(1,2))

JavaScript会解析为:

function suiyi(x,y){

x;

++y;

return x+‘ ‘+y;

}

console.log(suiyi(1,2));

解析中,javaScript会将x独立的解析为一整体,故在其后加上了分号,导致了后面++y的整体结合,所以脚本最后会输出如上图所示那样,

而代码的本意是:

function suiyi(x,y){

x++;

y;

return x+‘ ‘+y;

}

console.log(suiyi(1,2));

所以,涉及”++”、”--”运算符,如果要将其用做后缀表达式,运算符和表达式必须同一行。因为只有把运算符放在同一行,javaScript才能正确地把后缀表达式解析清楚。

细节3

自动填补分号有时还会导致一些意想不到的情形

比如:

var y=x+f

(a+b).toString()

JavaScript将上述代码解析为:

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

根据细节2的填补分号规则,这里JavaScript错误的认为第二行的圆括号和第一行的f组成了一个函数调用f(a+b)。

所以,这里必须手动的添加:

var y=x+f;

(a+b).toString();

为了避免这个细节上的错误,可以保守地在第二段语句前加上一个分号:

var x =0

;[x,x+1,x+2].forEach(console.log)

哪怕上面的语句被修改了,或者分号被删除了,前面的分号还能保证了正确地语句解析

还有一个万全之策,就是你别在耍酷,该有分号的就添加分号,该没的就不添加,省得以后麻烦!

JavaScript语法中分号使用的细节,布布扣,bubuko.com

时间: 2024-10-28 15:15:16

JavaScript语法中分号使用的细节的相关文章

Javascript语法基础

Javascript语法基础   一.基本数据类型   JavaScript中支持数字.字符串和布尔值三种基本数据类型: 1.数字 数字型是JavaScript中的基本数据类型.在JavaScript中的数字不区分整型和浮点型,所有的数字都是以浮点型来表示的. 2.字符串 字符串型是JavaScript中用来表示文本的数据类型,是由Unicode字符.数字和标点符号组成的一个字符串序列.字符串通常都是用单引号或双引号括起来的.如果在字符串中包括着特殊字符,可以使用转义字符来代替.例如: “”  

JavaScript语法细节——引用与复制

原文:JavaScript语法细节--引用与复制 我们都知道,JS中变量的赋值有两种方式,最近在折腾自己写的标签栏插件,碰到了很多平时没注意的问题.正好,那边处理清楚了,稍微整理一下关于引用与复制相关知识,可能会不定期增加新碰到的问题,有错误希望看到的人指出,避免传播不正确的知识. 先大致分一下类,引用类型:Object以及其旗下的Array,Date,RegExp,Function:基本包装类型:Boolean,number,String. 在赋值与传递参数的时候,引用类型传递的是指针,基本包

Js中分号使用总结

作者:尤雨溪链接:https://www.zhihu.com/question/20298345/answer/49551142来源:知乎著作权归作者所有,转载请联系作者获得授权. 没有应该不应该,只有你自己喜欢不喜欢.JavaScript 语法长得 C-like 不代表它本质上和 C 是一类语言,所有直觉性的 "当然应该加分号" 都是保守的.未经深入思考的草率结论.后来新设计的语言里可选分号的多得去了,光是 "可以加分号但是大家都不加" 的语言就有:Go, Sca

JavaScript DOM编程艺术学习笔记-第二章JavaScript语法

一.JavaScript示例 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5 <title>Just a Test</title> 6 </head> 7 <body> 8 <script src="example.js"></scr

javascript语言中的毒瘤(上)

javascript语言中的毒瘤(上) 最近翻了<javascript语言精髓>,对js有了更进一步的了解,特别是js的糟糕特性,下面,结合书中的要点,给大家分享一下js的几个糟糕特性. 全局变量 全局变量实在所有作用域均可以访问的变量,在一些小型项目中全局变量给我们获取和使用函数,数据等提供了灵活,便捷:但是随着程序的越来越庞大,全局变量就变得越来越难维护:(因为一个变量可能会在很多地方被修改,还有可能被覆盖),一旦出现问题也很难定位和调试. Js的问题不仅在于它容许使用全局变量,而且在于它

总结JavaScript编程中的Promise使用

总结JavaScript编程中的Promise使用 Promise核心说明 尽管Promise已经有自己的规范,但目前的各类Promise库,在Promise的实现细节上是有差异的,部分API甚至在意义上完全不同.但Promise的核心内容,是相通的,它就是then方法.在相关术语中,promise指的就是一个有then方法,且该方法能触发特定行为的对象或函数. Promise可以有不同的实现方式,因此Promise核心说明并不会讨论任何具体的实现代码. 先阅读Promise核心说明的意思是:看

网站前端_JavaScript.0003.JavaScript语法变量

语法构成: 1. JavaScript中的一切(变量,函数名,操作符等)都是区分大小写的 2. JavaScript中的标识符(变量,函数,属性名称,函数参数名称),首字符必须为字母/下划线/美元符号$,其它字符可以为字母/数字/下划线 3. JavaScript中不能把关键字/保留字/true/false/null作为标识符 代码注释: 说明: JavaScript使用C风格的注释,包含单行注释(//)和多行注释(/**/) 变量相关: 1. JavaScript的变量是松散型(可用来保存任何

JavaScript DOM 编程艺术(1)---&gt; JavaScript语法

一.  JavaScript语法目录 语法 操作 条件语句 循环语句 函数 对象 二.  具体内容 2.1 语法 javaScript代码要通过HTML/XHTML文档才能执行.可以有两种方式完成这一点,第一种是将JavaScript代码放到文档<head>标签中的<Script>标签之间: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

JavaScript学习——JavaScript语法 语句

JavaScript 语法 JavaScript 是一个脚本语言. 它是一个轻量级,但功能强大的编程语言. JavaScript 字面量 在编程语言中,一般固定值称为字面量,如 3.14. 数字(Number)字面量 可以是整数或者是小数,或者是科学计数(e). 3.14 1001 123e5 字符串(String)字面量 可以使用单引号或双引号: <!DOCTYPE html> <html> <head> <meta charset="utf-8&qu