可能重复:
JavaScript === vs == : Does it matter which “equal” operator I use?
在JavaScript中比较相同类型的两个操作数是否相等时,使用==
或===
不会产生任何概念上的差异,所以我想知道哪个运算符实际上更快,比如我的情况是,必须从远程Internet位置下载JavaScript文件。
虽然严格相等运算符===
可能在许多用户代理上执行得更快,但它还需要使用JavaScript文件在网络上传输8位未压缩信息。
实际上,今天的平均CPU在执行数百个条件跳转方面比在互联网连接提供单个位时快得多,因此我热衷于使用==
代替===
和如果可能,!=
代替!==
。然而,我对阅读这么多推荐相反的博客感到困惑。
我有什么重要的意思吗?
答案 0 :(得分:1)
正如你所说,为了保证两个操作数都是相同类型的比较,指定两个操作符执行完全相同的步骤,并且应该(并且我认为)执行的操作相同。因此,在这些情况下使用==
而不是===
时,文件大小方面略有优势。
然而,有些人认为一致性更重要:===
通常更接近于测试平等时的意图,而只使用===
和!==
是许多人认为有用的东西并且可读。就个人而言,我有相反的规则,只有当操作数的类型存在不确定性时才使用===
,但我不会推荐任何一种方法。
如果您了解严格和非严格相等之间的区别,并且您确信使用==
和!=
不会导致您或其他任何人在处理您的代码时出现阅读和理解代码的任何问题在未来,继续使用它们。
答案 1 :(得分:1)
据推测,推荐一个在另一个上面的博客是出于与类似操作的逻辑一致性而非速度的原因。试图修改你的Javascript程序,以便从脚本中删除单个字符是不明智的;在服务之前通过minify或其他自动化工具运行它是一回事,但是手动调整Javascript以获得最小文件大小或单个操作数级别的执行速度是一项无休止的,吃力不讨好的任务,这将使您的站点更难维护。
使用哪一个操作数对你更具逻辑意义,所以当你两年后不记得这条询问线时,你不会感到困惑。
答案 2 :(得分:1)
var test="1";
console.log(test==1); // true
console.log(test===1); // false
==
检查测试是否为1但===
检查测试是否为1并检查其数据类型。在这种情况下,第二个表达式为false,因为它的数据类型是字符串(test是字符串),但右手操作数不是字符串。以下测试不同
var test=1;
console.log(test==1); // true
console.log(test===1); // true
因为测试包含Integer
1,其评估为Boolean
为真,右手操作数也相同。 ===
还检查两个操作数是否都是类型。
答案 3 :(得分:1)
如果我引用Douglas Crockford的 Javascript:The Good Parts :
JavaScript有两组相等运算符:===和!==,以及它们 邪恶的双胞胎==和!=。优秀的工作方式与您期望的方式相同。 如果两个操作数具有相同的类型且具有相同的值,那么 ===产生true而!==产生false。当操作数是相同的类型时,邪恶的双胞胎做正确的事,但如果他们是 不同的类型,他们试图强迫价值观。规则由 他们这样做是复杂和不可取的......缺乏 传递性令人震惊。我的建议是永远不要使用邪恶的双胞胎。 相反,始终使用===和!==。
是否存在性能差异,很难证明使用“邪恶的双胞胎”是合理的。