JavaScript:什么时候我们可以省略大括号?

时间:2014-07-21 18:51:40

标签: javascript

我今天注意到可以使用较少的大括号来完成JavaScript对象的循环。

例如,正常的做事方式:

// The normal way
var foo = {
    bar: 1
};

for(var key in foo) {  
    if(foo.hasOwnProperty(key)) {
        console.log(foo[key]); // prints out 1
    }
}

替代方案,通过删除额外的{ ... },它仍然有效:

// The alternative
var foo = {
    bar: 1
};

for(var key in foo) if(foo.hasOwnProperty(key)) { // <-- see :)
    console.log(foo[key]); // prints out 1
}

但是,我不太清楚为什么这是可能的。所以我的问题是:什么时候可以省略花括号?我得到了一个说“太宽泛”的downvote所以我试着强调我不是在寻找一百万个用例,简短的回答非常适合解释基础知识。

提前致谢!

4 个答案:

答案 0 :(得分:5)

if或循环(forwhile)之后,如果您之后只有一个语句,则可以省略{。所以

if (condition)
    someFunction();

等于

if (condition) {
    someFunction();
}

if (condition) a(); b();

等于

if (condition) {
    a();
}
b();

你甚至可以嵌套:

if (condition) 
    while(condition2)
        if (condition3)
            someFunction();

为了便于阅读,最好(阅读:我更喜欢)总是使用大括号(也不太容易造成编程错误)。

答案 1 :(得分:3)

只要有一个语句,就可以省略大括号。

for (var x in obj) {
    console.log(x);
}

可以成为

for (var x in obj)
    console.log(x);

但如果你有

for (var x in obj) {
    console.log(x);
    console.log(x);
}

它需要大括号。


这有些不一致。例如,它适用于forwhileif,但不适用于trycatch。为了保持一致性,我总是使用大括号。

答案 2 :(得分:0)

只要一条指令,就可以省略大括号。

for(var key in foo) 
    if(foo.hasOwnProperty(key))
        console.log(foo[key]); // prints out 1

for(var key in foo)
    if(foo.hasOwnProperty(key))
        for(var i=0; i<=10; i++) {  
            console.log(foo[key]); // prints out 1
            console.log(foo[key]); // prints out 1
            console.log(foo[key]); // prints out 1
        }

答案 3 :(得分:0)

据我所知,只有一种情况可以省略花括号,而当条件后只有一条语句

if (condition) statement;

在您的示例中,您已从第一个条件中省略了大括号,但将它们保留在第二个

if (condition)
    if (condition) { statement; }

[注意] 可以省略分号,但这被认为是糟糕的编程习惯。