所以我在过去的5年里一直用JavaScript编写,并且都是自学成才。我遇到越来越多的程序员时遇到的一个问题。我发现我并不总是以最好的方式编码。
我一直在试图找出在JS中编写单行if语句的最佳方法。我不关心可读性,项目不是开源的,所以我并不担心其他人加入它。
我如何写我的陈述
condition = true;
if (condition)
runFunction();
else
runSecondFunction();
但我发现每个人都在告诉我使用括号。我一直在写这个,因为他们总是抛出以下一行“它使阅读更容易”
condition = true;
if (condition) {
runFunction();
}else{
runSecondFunction();
}
最后有人终于告诉我,我应该写if语句,以便更接近我在C#中编写的内容,如下所示
condition = true;
if (condition)
{
runFunction();
}
else
{
runSecondFunction();
}
当然还有速记,但我通常只用它来切换像这样的变量
condition = true;
(condition) ? condition = false : condition = true;
但是也可以使用常规if语句的简写。例如:
condition = true;
(condition) ? runFunction() : runSecondFunction();
在编写单行JavaScript的所有方法中,这是编程以最快速运行的最佳方法。我不关心可读性,所以请不要说建议以这种方式或那样写它,因为它更容易阅读。还请举例说明为什么一种方式比另一种方式更快或更慢。
我不关心可读性并不是说这些陈述对我来说都难以阅读,它们在所有版本中对我都有意义。所以你们中的一些人可能认为难以阅读我可能不会。这就是我下一步的原因,因为这些都不是我难以阅读的,也许我应该把它写成JS处理它的最佳方式。
例如,我发现JS需要更长时间才能运行
counter++;
然后呢
counter = counter + 1;
所以最后要清楚我没有问题阅读其中任何一个,我只想知道哪个最适合JS处理。
答案 0 :(得分:3)
看看一些jsperf测试:
它们似乎都相对平等(除了我刚刚运行的测试中布尔版本更慢),所以我会选择你喜欢的最佳外观。
答案 1 :(得分:1)
你的速记可以缩短:
而不是:
(condition) ? condition = false : condition = true;
尝试:
condition = condition ? false : true;
var a = condition ? 'conditionTrueValue' : 'conditionFalseValue';
// Or in this case, since you're just toggling the boolean:
condition = !condition;
而不是:
(condition) ? runFunction() : runSecondFunction();
您可以保存以下几个字符:
(condition ? runFunction : runSecondFunction)();
现在,这方面的表现差异(如果有的话)将是微不足道的。
让您的代码可读。如果你必须在一年内回到你的代码,你会很高兴。
答案 2 :(得分:0)
我通常会因为将每个花括号放在单独的行中而感到烦恼,我不喜欢那个闭合的花圈后来有一些东西。另外,我不喜欢它们根本不用的时候。
这将是我的方式。
condition = true;
if (condition) {
runFunction();
}
else {
runSecondFunction();
}
当问题是关于三元的时候,我不得不说,只有当条件或结果中没有涉及函数时才使用它。
result = (number == 521 : "equal to 521" : "some other number");
我关心我的代码的可读性,重要的是,当你有几千行代码的文件时,看起来非常相似 - 如果它是不可读的,很难调试或升级代码。
答案 3 :(得分:0)
如果你'真的'不关心可读性/可维护性,那就按照感觉最舒服的方式写它。
根据我的编程经验,人们推荐使用大括号的原因是为了可维护性,当有人必须为if语句添加一段代码时,一个参数是,如果你输入一次,你就不会必须记住在需要代码块而不是单个语句时插入它。
我建议使用下面的表单,因为Javascript有一些带有大括号的怪癖(来自内存),我相信它与闭包/函数的概念有关)某些代码将无法运行。当我调试破碎的代码然后我读了它但很久以前,它让我感到惊讶。
if (expression) {
}
至于性能因素,我认为这更多地与正在执行的逻辑和代码有关,而不是你编写if
语句的方式。