JavaScript语句可以不以;结尾的烦恼

JavaScript做为一个灵活的脚本语言,其成功是我们显而易见的。不过对于JavaScript语句可以不以";"结尾这点,我对其一直都耿耿于怀!这个特性除了带来语句的混乱,且使其依赖于代码排版(换行)外,我没有发现任何的优点。难道是为了可以少敲一个";"?! 如果习惯了C#、C/C++等的强制";",会更加的觉得郁闷。

同时这个特性对于JavaScript的debug来说,是灾难性的。下面这个语句是正确的吗?

if ( results == 'AdvancedTimeSelect' )
{
    this.DoAdvancedTimeSelect();
    // . . .
}
else ( results && results.length > 0 )
{
    // . . .
}
// . . .
    这是我在把"if"-"else"语句结构变成"if"-"else if"-"else"结构时,不小心写成的代码(漏加了一个if)。如果是在C#中等强制要求";"作语句结尾的语言中,这样语句就是一个明显的语法错误。

可是上面这段代码在JavaScript中却是没有任何语法问题的,同时也可以"正常的"运行。只是这个正常带来的副作用太让人郁闷了,当这段代码处于完整的一个功能模块中时,给debug带来无尽的混乱。虽然另外一个重要的原因也是自己的眼神不好,才写成这样,不过我还是要对JavaScript不强制要求语句以";"结尾的规定耿耿于怀!

上面代码的结果是如果第一个if条件成立,那么两个()和两个{}内的代码都执行。如果不成立,就执行else以后的代码,包括()和{}括起来的。因为JavaScript把( results && results.length > 0 )当成一个语句作为了else的分支,然后{}就是一个独立的语句集合了。

(0)

相关推荐

  • JavaScript语句可以不以;结尾的烦恼

    JavaScript做为一个灵活的脚本语言,其成功是我们显而易见的.不过对于JavaScript语句可以不以";"结尾这点,我对其一直都耿耿于怀!这个特性除了带来语句的混乱,且使其依赖于代码排版(换行)外,我没有发现任何的优点.难道是为了可以少敲一个";"?! 如果习惯了C#.C/C++等的强制";",会更加的觉得郁闷. 同时这个特性对于JavaScript的debug来说,是灾难性的.下面这个语句是正确的吗? if ( results == '

  • 关于JavaScript语句后面的分号问题

    JavaScript自动加分号规则,有3条 当有换行符(包括含有换行符的多行注释),并且下一个token没法跟前面的语法匹配时,会自动补分号. 当有}时,如果缺少分号,会补分号 当程序源代码结束时,如果缺少分号,会补分号. 利用我自己的JS语法分析工具JSinJS(https://github.com/kissjs/JSinJS ),我求出了所有能够出现在语句第一个的JS语法标记 (就是Statement的first集合),他们是: ["debugger", "try&quo

  • 探讨JavaScript语句的执行过程

    废话不多说,直奔主题了.javascript的运行原理总结如下: 1.按照html文档流顺序执行javascript代码 浏览器是按照文档流从上到下逐步解析页面结构和信息的,javascript代码作为嵌入的脚本作为html文档的组成部分,所以javascript代码在加载时的执行顺序也是根据脚本标签<script>的出现顺序来确定的. 如果通过脚本标签<script>的src属性来引入外部.js文件,那么它也将按照其语句出现的顺序来执行,而且执行过程是文档加载的一部分.不会因为是

  • c#后台输出javascript语句示例程序

    复制代码 代码如下: using System;using System.Web;using System.IO;using System.Security.Cryptography;using System.Text.RegularExpressions; namespace MyOraComm{/// <summary>/// FuncTion 的摘要说明./// </summary>public class Function{  public Function()  {   

  • JavaScript语句错误throw、try及catch实例解析

    try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行. JavaScript 抛出(throw)错误 当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息. 描述这种情况的技术术语是:JavaScript 将抛出一个错误. JavaScript try 和 catch try 语句允许我们定义在执行时进行错误测试的代码块. cat

  • JavaScript 语句之常用 for 循环详解

    JavaScript中循环语句不少,for.for in.for of和forEach循环,今天对比Array.Object.Set(ES6).Map(ES6)四种数据结构循环语句支持的情况及区别. 新建四种数据类型的测试数据 let arr = [1, 2, 3, 4, 5, 6]; let obj = { a: 1, b: 2, c: 3 }; let map = new Map([['a', 'a1'], ['b', 'b2'], ['c', 'c3']]); let set = new

  • javascript语句中的CDATA标签的意义

    看到这样一串代码: <SCRIPT type=text/JavaScript> <!--//--><![CDATA[//><!-- var spaceStaticData={               style: '/style/common/',         hostId: 2241772,        hostPath:'',        hostName: 'mycm22',         visitorName:'mycm22',      

  • Javascript核心读书有感之语句

    在javascript中,表达式是短语,那么语句(statement)就是整句或命令.正如英文语句以句号结尾,javascript以分号结尾. 表达式计算出一个值,但语句使某件事发生. "使某件事发生"的一个方法是计算带有副作用的表达式.诸如赋值和函数调用这些有副作用的表达式,是可以作为单独的语句的.这种把表达式当做语句的用法也称做表达式语句(expression statement).类似的语句还有声明语句(declaration statement),声明语句用来声明新变量或者定义

  • 高性能JavaScript循环语句和条件语句

    一.循环语句 众所周知,常用的循环语句有for.while.do-while以及for-in,forEach.除了for-in和forEach性能略低外,平时我们对前三者的选择更多的是基于需求而非性能考虑,今天我们就对它们各自的性能做个测试,告诉我们最极端的情况下还能做哪些优化. 首先我们来谈谈为何for-in和forEach会比其他的慢.for-in一般是用在对象属性名的遍历上的,由于每次迭代操作会同时搜索实例本身的属性以及原型链上的属性,所以效率肯定低下:而forEach是基于函数的迭代(需

  • JavaScript 基础篇之运算符、语句(二)

    javascript:运算符 其实运算符大家要是有计算机语言基础应该都知道,可能甚至比我还精通,这样我就不多解释了,就来说说其它几个生疏的吧! 1.in 运算符:in运算符要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数是一个数组或者对象,如果左边的值是右边的对象的一个属性,它返回true. 复制代码 代码如下: var objvalue = {x:1,y:7}; document.write("x is in objvalue:" + ("x"

随机推荐