x === 0或x < 1在Javascript中,哪个更好?并且是x&lt; 1包括类型检查?

时间:2017-11-06 04:45:55

标签: javascript

有人说建议与0比较。 但是在javascript案例中,x === 0包含的类型检查通常比x < 1慢。

但这并不是一个很大的性能问题。我只是对两个操作的性能感到好奇。我认为x < 1更好。

2 个答案:

答案 0 :(得分:2)

  

有些人说建议与0比较。但是在javascript情况下,x === 0包括类型检查,它通常比x&lt; 1。

它们并不等同。

x === 0比较该数字是否等于零。就是这样。

另一方面,

x < 1允许零,所有负数所有数字都在1和0之间。

所以,我不明白为什么你必须比较他们两个。只需选择最能代表您正在验证的条件的那个。

  

并且x&lt; 1包括类型检查?

没有。您可以在浏览器控制台中轻松检查它。

console.log("0 < 1: " + (0 < 1));
console.log("'0' < 1: " + ('0' < 1));
console.log("0.5 < 1: " + (0.5 < 1));
console.log("'0.5' < 1: " + ('0.5' < 1));
console.log("20 < 1: " + (20 < 1));
console.log("'20' < 1: " + ('20' < 1));

答案 1 :(得分:2)

根据EMCA标准,这是我做的一个小比较 http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

以下部分:

  • 7.2.12抽象关系比较
  • 7.2.14严格的平等比较

对于&lt; ,它会调用ToPrimitive两次,这也会调用Type两次,然后它将调用ToNumber,它必须转换原语为了数字,因此在那里发生了很多类型转换,增加了CPU周期。

但是,对于 === ,如果左侧是数字,则会出现短路,从而导致CPU周期较短。

可以说明的一个例子如下:

console.log(1 < "2"); // This return true because "2" is converted to Number
console.log(1 === "1"); // This will return false immediately because it failed Type checking

因此,我会说 === 在CPU周期方面应该比&lt; 略快

希望它有所帮助!