if(a==3){
    、、、、、、
}如果程序写成这样是什么效果?if(a==3)
{
    、、、、、、
}
如果程序写成这样又是什么效果?
这个括号问题你们发现没

解决方案 »

  1.   

    LZ难道说的是jslint?那玩意太变态
    包括visual studio在内的很多编辑器都是支持两种格式之间的切换的.....
      

  2.   

    我在学java时书上用的前者  学c时用的后者 只是一种习惯  没什么不同  程序会忽略多余的空格的
    没什么不同吧
      

  3.   

    js代码?java代码?只知道在myeclipse中代码的风格是第一种,第二种同事习惯这样写,感觉运行没啥感觉啊,求实例,求解释,求研究~!!!
      

  4.   

    JS的规范写法是第一种。
    第二种是C/C++所要求的规范。
    任何官方或常见资料里,我们都看不到使用第二种的。
    这不仅是个人喜好,或者视觉好坏的问题。
    而是因为JS有一些语法宽松处理的机制,容易造成错误结果。
      

  5.   

    绝大多数的编程语言,都用大括号({})表示区块(block)。起首的大括号的位置,有许多不同的写法。
    最流行的有两种。一种是起首的大括号另起一行:
      block
      {
        ...
      }
    另一种是起首的大括号跟在关键字的后面:
      block {
        ...
      }
    一般来说,这两种写法都可以接受。但是,Javascript要使用后一种,因为Javascript会自动添加句末的分号,导致一些难以察觉的错误。
      return
      {
        key:value;
      };
    上面的代码的原意,是要返回一个对象,但实际上返回的是undefined,因为Javascript自动在return语句后面添加了分号。为了避免这一类错误,需要写成下面这样:
      return {
        key : value;
      };
    因此,
      规则1:表示区块起首的大括号,不要另起一行。
      

  6.   

    以前也用过第二种,不过bug倒是木有发现过。用c#用习惯了,随手就是一回车后面就统一是用第一种了
      

  7.   

    这个除了return和break/continue标签号,不能折行,其它是没有任何问题的,不要危言耸听。自动插分号也不是盲目的,自成一个完整语句的才会自动插入分号,例如上面列举的return/break/continue。
    if/do/while/function()等等,不是自成完整的语句(也就是说没有后续内容是会出错),不会插入分号。
      

  8.   

    return
    {
    ...
    }
    使用这种的,是对语法元素缺少理解。这种我是打死不折行,包括{}的内容,return {...}。
      

  9.   

    总觉得人生之中缺少些什么,现在终于明白了:从来没这样写过return。
      

  10.   

    没错,这是最常见的一种。
    不过这个例子不太充分,让某些人觉得不太必要用这种形式。
    return {
    left : value;
    top : value;
    width : value;
    height : value;
    };
    这样就容易知道是不是有必要了。
    在很多时候,处理的不是一个简单的数据类型,而可能是一个复杂的结构,保持永远不会出错的书写规范就是非常重要的。
    22楼说危言耸听,我觉得却毫不过份。如果你能在上百万行的代码里,每一行都要清楚辨别是否可以使用第二种方式,如果不行再用第一种方式的话,我倒觉得你这有点危言耸听了。
      

  11.   

    当然,还没哪个单独JS文件是要写上百万行的,我指的是你在写所有的JS时。
    常在河边走,哪有不湿鞋。
    如果是真的河边,去走走倒也能切换一下心情,有点作用,哪怕偶尔真湿湿鞋,也不失乐趣。
    可是这种不保险的书写方式,你有任何理由非要采用吗?一旦这个“湿鞋”了,你又不可能记得在什么位置,甚至不知道是这个引起的问题,那么要在上百万的JS语句里排查出来,和把河水都喝光的难度也差不多了。
      

  12.   

    javasript里不提倡用第二种格式,是因为js解释器的原因,那样写容易出莫名其妙的问题
      

  13.   

    没有任何区别,不要胡思乱想。
    java编译器会无视所有空串,结束符只有;和}
      

  14.   

    C\C++ 一般用第一种,看到很多java的用第二种
      

  15.   

    一直都用第二种,觉得这样对其看着准确,没用JavaScript,不清楚
    c/c++和PHP中都这样用的
      

  16.   


    return {...}。本来就是一种很不好的习惯。不明白为何要这样写。
      

  17.   

    楼主提及的规范是指圈内规范还是ECMA262,圈内规范咱就不讨论了,第一种风格是基本共识,不过ECMA262貌似没推荐或否定其中某种风格。之所以说危言耸听,是因为楼主故作神秘先抛出if两种风格,然后引出这样一个结论:
    然后拿return说事,明显误导if等也必须这么写。ECMA262有几条忠告:
    An Expression in a return or throw statement should start on the same line as the return or throw token.
    A postfix ++ or -- operator should appear on the same line as its operand.
    An Identifier in a break or continue statement should be on the same line as the break or continue token.
    通篇只有这几个on the same line。说第二种风格不保险的、会导致莫名其妙问题的,请另行举例。莫名其妙这个词用得好啊,莫须有的罪名可以不负责任地往上扣。Javascript会自动添加句末的分号,不是四海皆准的金科玉律,否则无论那种风格,左花弧后面自动来个分号,几乎所有代码要跪下。关于自动插入分号规则,有兴趣可以查阅:ECMA262 - 7.9 Automatic Semicolon Insertion对自动插入分号机制的曲解,导致对编码风格的曲解。插入机制是毒药不是圣经,手工分号明确语句结束才是必须强调的。
      

  18.   

    说出来是好事。至少以前不知道的人,现在知道了。以前不注意的人,现在碰到类似情况会注意了
    至于更具体的,参考相关资料就可以了。Vidor 查阅的估计已经相当详细了。
      

  19.   

    呵呵,你很细心也很较真。角度不同,我没理解到你这些意思,你说的也有道理。
    我一看楼主开始发的例子,就大概猜出他的意思了,所以并没拘泥问题本身。
    我主要是从重视统一规范的书写方式考虑的。
    无论是工作还是个人资料整理,都很必要。
    1.自己书写的话,要为不规范统一的书写方式去分神是不必要也容易出错的。
    2.处理别人的代码时,会由于别人不规范的代码导致更多机率的问题。就拿楼主的代码例子来说。讲到规范问题,就要考虑各种在我们控制范围之外但又的确会让我们遇到的事情。
    有不少人会利用JS的特点,在句末少打那个分号。可是一旦要把这样的代码直接minify时,就出错了。
    于是你就得自己去加分号。假设在大量的代码中存在下面的代码:
    var a=2
    if(a==3)
    {
    alert(1)
    }
    一旦你手误,打成了
    var a=2;
    if(a==3);
    {
    alert(1);
    }
    这个代码还是会按照这种形式“正确”执行。因为if(a==3)后面的“;”本身就是一个“空执行”语句。解释器会认为这是合法的。但实际的结果却是错的。
    而如果事先它是一个规范的代码:
    var a=2;
    if(a==3){
    alert(1);
    }
    那么即使我们处理重复了,变成这样:
    var a=2;;
    if(a==3){;
    alert(1);;
    };
    它仍然和之前保持完全一样的处理逻辑。所以我说,保守一点没什么不好,避免问题,就是尽量避免那些我们眼前碰不到甚至想不到的问题,也没必要为那些本可以避免的事情花专门精力去对付。做错事,有错综复杂的因由和千奇百怪的结果,但我们可以不做,只做对的,这对我们自身的生命,事业的效率,都是好的。
      

  20.   

    return {
    left : value;
    top : value;
    width : value;
    height : value;
    };你家的json不用逗号,用分号的,PFPF,看了半天才明白。写判断/方法名紧跟着不按{}手贱能按到;的我想真是奇才了。。
      

  21.   

    你太out了,他家的是智能机,不该加分号的一定不会加的,不用你来操心。
      

  22.   

    我一看楼主开始发的例子,就大概猜出他的意思了,所以并没拘泥问题本身。[/Quote]是刚接触JavaScript能猜得出来吗,数数本贴有多少人顺着楼主的思路被忽悠了。return问题可以单拿出来说,return object的{}已经不是block的意思了,block是{StatementList},请举一个:token {
    StatementList
    }token
    {
    StatementList
    }不同结果的例子,不要不负责任的模棱两可。拿一个似是而非的表面现象,得出一个不负责任的结论,自己都把自己忽悠进去了,疏忽出错根本就不能赖风格问题,任何风格疏忽都会出错。再回theforever:
    再回一旦你手误,打成了
    var a=2;
    if(a==3); //这里确定语句结束了吗,空语句注释是必不可少的,从可读性来说。
    {
    alert(1);
    }
    这能赖风格问题吗,你属下这样写,你会有什么感想?你会认为属下暂时不具备上岗资格,还是告诉属下用另一种风格,手误也无所谓?
    var a=2;;
    if(a==3){;
    alert(1);;
    };习惯风格二的,根本不可能出现这样的手误,纯粹是找理由。回复64楼:
    这个确实是手误了,细节问题暂且放一边。哎,忽悠就忽悠呗,我确实太较真了。
      

  23.   

    比较认同你的观点,这个问题的结论告诉大家是件好事,但是问题引出的方法不太好,有点误导的味道在里面。
    是刚接触JavaScript能猜得出来吗,数数本贴有多少人顺着楼主的思路被忽悠了。
    引用 57 楼 的回复:
    其实 我是为了强调有时一点疏忽,可能会出错,那时连错在哪都不知道
    return问题可以单拿出来说,return object的{}已经不是block的意思了,block是{StatementL……
    [/Quote]
      

  24.   


    return 那个括号换行与不换行有很大差别,但与风格一或二无关。我是否可以质疑:如果我不说,你确保知道分号是不会乱插的,是有ECMA262/7.9规则的?如果所谓的规范,是为提高代码的容错率或者称为容手误率(参见62楼),那么我认为这个规范不要也罢,我在想如果==手误为=那该赖什么?风格本无优劣之分,经theforever提点,我反而觉得风格二更好,至少可以提醒我少点随意而多点严谨。
      

  25.   

    业余的飘过,支持一个。
    其实个人喜欢
    if (...) {
    }
    else {
    }
    不为别的,就为了能少两行。
      

  26.   

    1.对语法没有完全理解
    2.粗心大意
    第一条只要你之后能发现错在哪,基本就行了;第二条,那就是你的毛病了,这个得改!
    源码是给人来阅读的,所以有助于人阅读非常重要!
    要想省空间,直接找个压缩工具,神马的字节都有了!
    压缩,这个是需要你更加规范的代码了,比如:
    ==== 代码块 ====
    var a = function(){}
    a.name = "";
    ==== 代码块 ====
    这样的代码,肯定报错, var a = function(){}后面一定记得加分号,这是良好的编码习惯!
      

  27.   

    看了这个帖子让我长了一个知识。
    自动添加分号规则,网上找来的
    Certain ECMAScript statements (empty statement, variable statement, expression statement, do-while statement, continue statement, break statement, return statement, and throw statement) must be terminated with semicolons. Such semicolons may always appear explicitly in the source text. For convenience, however, such semicolons may be omitted from the source text in certain situations. These situations are described by saying that semicolons are automatically inserted into the source code token stream in those situations.
    当你没有手动写分号上去,某些特殊的语句会自动补上分号;其中return就是一个。
    所以楼主引出来了那个所谓的问题
    正如Vidor 他所说,楼主的说法的确容易误导人。所以我们还是还原问题本省的知识点吧,就是补充分号了
      

  28.   

    csdn果然有专家,但是学习js的时候就注意到{}的书写方式,只是当时说最好这样写,要不会有意想不到的麻烦。不过不知道是为什么!现在,明白了!谢谢,我觉得说的很对,有问题大家拿出来讨论一下共同进步是很好的!
      

  29.   

    http://blog.csdn.net/qq838419230/article/details/7944797#t17
      

  30.   

    这个问题我觉得讨论了这么久,还是个人习惯问题,js最好用第一种,以免出现不必要的错误。语言(JAVA,C,C++等)纯属个人爱好。
      

  31.   

    大括号的位置(Opening Brace Location)
    程序猿常常都会选择从哪里开始写括号——在同一行,还是另起一行?
    [javascript] view plaincopy
    if (true) {  
    alert("It's TRUE!");  
    }  
      
    if (true)  
    {  
    alert("It's TRUE!");  
    }  
    在这个特定的例子中,括号在什么地方都没有影响,但有些情况下大括号的位置不同会导致不同的结果;
    这是因为分号插入机制(semicolon insertion mechanism),JavaScript中不以分号结束的语句也不会有错;
    这种行为会导致一个问题,当函数返回一个对象字面量时并且大括号在下一行才开始;
    [javascript] view plaincopy
    // warning: unexpected return value  
    function func() {  
    return  
    {  
    name: "Batman"  
    };  
    }  
    如果你想这个函数返回一个对象——有个一个name属性,你会非常吃惊!因为分号插入机制,这个函数会返回undefined,上面的代码等同于:
    [javascript] view plaincopy
    // warning: unexpected return value  
    function func() {  
    return undefined;  
    // unreachable code follows...  
    {  
    name: "Batman"  
    };  
    }  
    在函数结束的时候,要使用大括号的话,一定要将大括号放在同一行;
    [javascript] view plaincopy
    function func() {  
    return {  
    name: "Batman"  
    };  
    }  
      

  32.   

    有点意思..学java的时候用的是第一种
    学C#的时候用的是第二种
    写js的时候js{}一般就后面一直加不换行的
      

  33.   

    啊,这个还真是不知道。VS中正常都是第二种情况的,js中我还没怎么注意,谢谢楼主分享
      

  34.   

    C#用第二种,可以清楚看出代码块的开始结束。习惯问题,所以JS也是用第二种,没有出现过什么问题。