JavaScript: 什么时候可以省略花括号?

3

我注意到今天可以使用更少的花括号来循环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
}

然而,我不太确定为什么可以省略花括号。所以我的问题是:何时可以省略花括号?我得到了一个“范围过大”的否定回答,所以我想强调我不是在寻找无数用例,简短的回答很适合,解释基础知识即可。
提前感谢!

1
你甚至可以省略for循环中的括号...任何只有一行的内容都可以省略括号。 - Benjamin Trent
顺便提一下,建议始终使用花括号,因为省略它们可能会导致一些非常烦人的错误。个人而言,我总是使用它们。 - forgivenson
1
@forgivenson 说得好,还有提醒给那个踩的人。下次请留言,我讨厌那些只路过点箭头的人。这里没有读心术。 - Mauno Vähä
@MaunoV:我也不喜欢没有评论的踩票。 - Sajad Karuthedath
4个回答

7

当只有一条语句时,您可以随时省略花括号。

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则不行。为了保持一致性,我总是使用花括号。


@MaunoV:我理解了我的错误,并且向您道歉,对此感到抱歉。 - Sajad Karuthedath
但是可以在for语句后面分成两行: for(var key in foo) { if(foo.hasOwnProperty(key)) { console.log(foo[key]); } } - Garis M Suero
@GarisMSuero,因为for只有一个语句:if。那个if也只有一个语句。这些语句是嵌套的。 - Paul Draper

5

在使用if或循环(for, while)时,如果之后只有一条语句,可以省略{。所以:

if (condition)
    someFunction();

等于
if (condition) {
    someFunction();
}

并且
if (condition) a(); b();

equals to

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

你甚至可以将其嵌套使用:
if (condition) 
    while(condition2)
        if (condition3)
            someFunction();

为了易读性(也就是说,我更喜欢),最好始终使用花括号(也不容易出现编程错误)。


谢谢提供这些示例。也许循环对象的巧妙方式让我感到惊讶。 :) - Mauno Vähä

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
        }

0
据我所知,只有在条件后只有一个语句的情况下,才能省略花括号。
if (condition) statement;

在你的例子中,你省略了第一个条件的花括号,但保留了第二个条件的花括号。
if (condition)
    if (condition) { statement; }

[注意] 虽然可以省略分号,但这被认为是不良的编程习惯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接