出于好奇。我检查一些字符串是否长于指定的最大长度:
var name = "This Is a Name";
if (!name.length >= 10)
{
//valid length
}
else
{
alert("Too long");
}
这是更好/更快(?):
if (name.length <= 10)
我记得在某些语言中最好先写一下否定,所以它甚至更好(yip,我就是这样写的)就像这样(?):
if (10 >= name.length)
我知道10在代码中重叠 - 不介意。我只想知道是否有任何表现/最佳实践。
答案 0 :(得分:3)
我几乎总是使用<
和<=
代替>
或>=
。我发现左边的值越小(测试成功时)就越快进行心理解析。它还进行了范围测试:
if (0 <= a && a < 10) …
阅读更像数学等价物0≤ a &lt; 10。
表现方面,如果有任何可衡量的差异,我会感到惊讶。
答案 1 :(得分:2)
这不在你的手中,翻译人员会做出任何它认为正确的事情。 Javascript解释器现在可能会如此先进,他们会对此进行优化,但更有可能的是,这些解释器本身是使用编译器编译的,该编译器将优化翻译本身,因此它甚至不在编写解释器的人手中。
所以,如果你想要一种你想要控制这种行为的语言,你需要asm。甚至没有(优化)C你真的控制了它。
唯一可以确定的是,n.length > 9
可能会稍微快一些,因为它包含更少的字符,因此可以更快地解析它。我们说的是纳秒,甚至可能是皮秒。
答案 2 :(得分:1)
如果它实际上不是你的应用程序的瓶颈,我建议使用最强可读,而不是性能最高的代码 - 即使性能略有不同,我怀疑它确实存在在你的情况下。
就你而言,就我而言,最容易理解的代码就是:
if (name.length <= 10)
如果您真的想要从代码中获得最佳性能,那么您必须编写一些测试;因为在大多数情况下通常不能说这个,例如几乎每个JavaScript实现都会表现得略有不同。
另外,请务必查看“过早优化”,例如在wikipedia (see section "When to optimize")。
答案 3 :(得分:1)
让我简单评论一下你的最后一个例子:我很确定你的if(10 >= name.length)
约定是在错误的C编译器警告时代开始的,以避免if(pointer = NULL) { error(); } else { i = *pointer; }
类型的错误,因为反转版本会使拼写错误导致编译错误。这在jslint-less JavaScript中仍然令人惊讶地相关,但我认为它不会影响非相等比较。
对于其余部分,我也坚定地处于“无差异”阵营,即使我没有进行过实验,我也无法想到订单会产生性能差异的合理原因。