2014-10-05 68 views
-2

我目前正在通过Eloquent Javascript进行工作,我想学习使用代码块或括号表示法的一些硬性规则。下面是我理解的一个示例块。它试图打印出农场所有的鸡和牛的数量,如果数字是“7”,则它将使其长度为3位,因此它读取“007”。什么时候应该在Javascript中使用代码块或括号?

function printFarmInventory(cows, chickens) { 
    var cowString = cows 
    while (cowString.length < 3) 
     cowString = "0" + cowString; 
    console.log(cowString + "Cows") 
    var chickensString = chickens 
    while (chickensString.length < 3) 
     chickensString = "0" + chickensString 
    console.log(chickensString + "Chickens") 
} 

printFarmInventory(7,11) 
=> 007 Cows 
    011 Chickens 

所以看起来我们在定义一个函数的可执行代码块时需要代码块。我们是否还需要/将其用于条件?可以将上面的代码写成:

function printFarmInventory(cows, chickens) { 
     var cowString = cows 
     while (cowString.length < 3) { 
      cowString = "0" + cowString; 
     } 
     console.log(cowString + "Cows") 
     var chickensString = chickens 
     while (chickensString.length < 3) { 
      chickensString = "0" + chickensString 
     } 
     console.log(chickensString + "Chickens") 
    } 

我们可以在while循环中包含括号吗?

显然我们对if/else条件使用括号......但while循环呢?这些括号是否可选?

function MyFunction(){ 
if(a==1){ 
alert("Hello world!") 
}else{ 
alert("Goodbye world!") 
} 
} 

PS:我之所以不简单地测试这个,是因为我没有一个好的方法来测试Javascript代码。人们使用什么?如何在Chrome开发人员工具中编写代码块?

+2

的http://的jsfiddle。net – SLaks 2014-10-05 20:58:34

+5

''我没有一个很好的方法来测试Javascript代码'' - 你没有...一个网页浏览器?你可以写一个带有JavaScript的网页并在浏览器中打开该页面。 – David 2014-10-05 21:00:10

+1

@SLaks似乎比简单的按F12更复杂,仍然只是尝试一下为自己... – 2014-10-05 21:01:39

回答

1

此代码确实工作:

function printFarmInventory(cows, chickens) { 
     var cowString = String(cows); 
     while (cowString.length < 3) { 
      cowString = "0" + cowString; 
     } 
     console.log(cowString + " Cows") 
     var chickensString = String(chickens); 
     while (chickensString.length < 3) { 
      chickensString = "0" + chickensString 
     } 
     console.log(chickensString + " Chickens") 
    } 
3

无论您是否将花括号用于可选的块,大多都是风格问题。但是,当你不使用它们时,有一些缺陷,所以我通常建议它们总是被使用。

典型的例子:

if (x) 
    if (y) 
    do_something(); 
else 
    do_something_else(); 

缩进这里建议开发者的意图是为else块属于第一个条件,而实际上它属于第二。如果你使用大括号,那么这种情况就不会发生。

而且,它是不太可能的代码被损坏,维修时:

if (foo) 
    bar(); 

baz(); 

假设你正在调试,并尝试这个办法:

if (foo) 
    debugger; 
    bar(); 

baz(); 

糟糕,bar()是条件块的部分不再。同样,总是使用大括号避免了这个问题,并且避免了相当尴尬的“添加大括号以添加debugger;行并在完成时删除它们”跳舞。

最终,没有好的参数可供选择时忽略它们。可能发生的最糟糕的事情是你的同事可能会取笑你(我曾遇到过这种情况),你应该把它当作教育他们的机会!

有时候我碰到的说法,如果你不使用他们,你可以写一个块都在同一行,像这样:

if (foo) bar(); 

但是,这是一个愚蠢的说法,因为你可以很这样做很容易在不牺牲任何可读性:

if (foo) { bar(); } 
+0

是调试器;另一行代码?对不起,我还没有在我的代码中使用调试器行。问题是如果添加调试器行,bar();行被推下来,不再是条件的一部分?另外,你为什么包括一个baz();线? – Jwan622 2014-10-05 21:28:19

+1

@ Jwan622'baz();'是不是条件的一部分的代码,就像一个例子。 'debugger;'是一个声明,在大多数JavaScript环境中什么都不做(或导致运行时错误),但在某些情况下(例如Chrome)会导致JavaScript调试器暂停执行,以便您可以检查程序状态点。是的,我的意思是,如果你不使用括号,通过添加该行,你会错误地从条件块中删除'bar();'而不打算。如果大括号在那里,你不会有。 – cdhowie 2014-10-05 21:48:22

相关问题