JavaScript可选分号细节

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

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

细节1:

a=1; //第一个分号可以省略的
b=2;

a=1; b=2; //这样的格式第一个分号是不可以省略

细节2:

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

比如:


var a  //自动添加分号var a;,因为不添加JavaScript不能正确解析代码var a a
a //第二个a可以单独当一条语句(a;),但对比解析代码,发现其实JavaScript并没有给a填补分号,而是和第三行内容一起解析(a=3;)。
=
3
console.log(a);

JavaScript将上述代码解析为:


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

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

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


return
true;

JavaScript会解析为:


return;
true;

而代码的本意是


return true;

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

x
++
y

JavaScript会解析为:


x; ++y;

而代码的本意是


x++; y;

细节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)
//哪怕上面的语句被修改了,或者分号被删除了,前面的分号还能保证了正确地语句解析

时间: 2024-10-22 17:47:55

JavaScript可选分号细节的相关文章

[转载]JavaScript基础知识细节

作者:张子秋 出处:http://www.cnblogs.com/zhangziqiu/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 一.摘要 本文是jQuery系列教程的剧场版, 即和jQuery这条主线无关, 主要介绍大家平时会忽略的一些javascript细节.  适合希望巩固javascript理论知识和基础知识的开发人员阅读. 二.前言 最 近面试过一些人, 发现即使经验丰富的开发人员, 对于一些

Javascript (ECMAScript5) 的细节和违反直觉的地方

记录在学习Javascript (ECMAScript5) 中的一些与其他语言的不同之处,本文会不断更新. 里面的知识可能并不太适合有一定经验的Javascript程序员,仅仅但不限于给初学者阅读.  1. null 是一个表示"空"的对象指针 var foo = null console.log(typeof foo) //输出 object 而不是你所认为的 null  2. undefined 是 null 派生而来的 console.log(null == undefined)

JavaScript的分号

JavaScript的语法和Java语言类似,每个语句以;结束,语句块用{...}.但是,JavaScript并不强制要求在每个语句的结尾加;,浏览器中负责执行JavaScript代码的引擎会自动在每个语句的结尾补上;. 注意:让JavaScript引擎自动加分号在某些情况下会改变程序的语义,导致运行结果与期望不一致.在本教程中,我们不会省略;,所有语句都会添加;.

JavaScript 语句分号的必要性

Statements in ECMAScript are terminated by a semicolon, though omitting the semicolon makes the parser determine where the end of a statement occurs, as in the following examples: var sum = a + b //valid even without a semicolon - not recommended var

JavaScript语法中分号使用的细节

关于JavaScript中可选分号的问题有几个细节要注意: 一般来说,JavaScript和其他语言一样都是使用分号,将语句隔开,但在JavaScript中,如果语句各自独立一行,有时也可以省略分号的 细节1: 如果当前语句和随后的非空格字符不能当成一整体来解析的话,JavaScript就在当前语句行结束处自动填补分号 var a a = 3 console.log(a); JavaScript将上述代码解析为: var a; a=3; console.log(a); 第一行代码 var a自动

【JavaScript 从零开始】 语言核心部分----可选的分号

学习笔记,主要是记录一些JavaScript需要注意的东西,和一些小的细节. 可选的分号 和其他许多编程语言一样,JavaScript 使用分号(;)将语句分隔开的.这对增强代码的可读性和整洁性非常重要. 缺少分割符,一条语句的结束就成了下一跳语句的开始,反之亦然. 在JavaScript中,如果语句个独自占一行,通常可以省略语句之间的分号(程序结尾或又花括号"}"之前的分号也可以省略). 许多JavaSritpt程序员使用分号来明确语句的解释,即使在并不完全需要分号的时候也是如此.

JavaScript夯实基础--关于分号

和其他许多编程语言一样,JavaScript使用分号(;)将语句分隔开,这对增强代码的可读性一整洁性是非常重要的,缺少分隔符,一条语句的结束就成了下一条语句的开始,反之亦然.在JavaScript中,如果语句各自独占一行,通常可以省略语句之前的分号(程序结尾或右花括号之前的分号也可省略).不过关于JavaScript中可选的分号有几细节需要注意. JavaScript并不是在所有换行处都填补分号:只有在缺少分号就无法正确解析时,才会填补分号.换句话说,如果当前语句和随后的非空格字符不能当成一个整

JavaScript 分号使用总结

没有应该不应该,只有你自己喜欢不喜欢.JavaScript 语法长得 C-like 不代表它本质上和 C 是一类语言,所有直觉性的 "当然应该加分号" 都是保守的.未经深入思考的草率结论.后来新设计的语言里可选分号的多得去了,光是 "可以加分号但是大家都不加" 的语言就有:Go, Scala, Ruby, Python, Swift, Groovy...至于说 "很难总结什么时候加不加",其实真的很简单.真正会导致上下行解析出问题的 token

JS学习第四天----可选的分号

可选的分号 和某些语言一样,JS使用分号(;)将语句分隔开.这对增强代码的可读性和整洁性是很重要的:缺少分隔符,一条语句的结束就成了下一条语句,你好像在和别人讲对讲机的时候,没说完一句话,都要说over一样,表示你说完了.在JS中,如果语句各自独占一行,通畅可以省略语句之间的分号.许多JS程序员使用分号来明确标记语句的结束,及时在丙烷完全需要分号的时候也是如此.另一种风格是,在任何可以省略分好的地方都将其省略,只有在不得不用的时候才使用分号.不管采用哪种变成风格,关于JS中可选分号的问题有几点需