我目前正在使用Eloquent Javascript,我想学习一些使用代码块或括号表示法的快速规则。这是一个我理解的样本块..它试图打印出农场所拥有的鸡和奶牛的数量,如果数字是“7”,它会使它长3位,因此它显示为“007”。
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开发人员工具中编写代码块?
答案 0 :(得分: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(); }
答案 1 :(得分: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")
}