0

可能重复:
JavaScript === vs ==:我使用哪个“相等”运算符有关系吗?

在比较 JavaScript 中相同类型的两个操作数是否相等时,使用==or===不会产生任何概念上的差异,所以我想知道在我的情况下,当必须从远程下载 JavaScript 文件时,哪个运算符实际上更快互联网位置。

虽然严格相等运算符===可能在许多用户代理上执行得更快,但它还需要 8 位以上的未压缩信息与 JavaScript 文件一起在网络上传送。

碰巧的是,今天的平均 CPU 在执行数百个条件跳转时比 Internet 连接在提供单个位时要快得多,所以我热衷于在可能的情况下使用==代替===!=代替!==。然而,我对阅读这么多推荐相反的博客感到困惑。

我有什么重要的地方遗漏了吗?

4

4 回答 4

1

正如您所说,为了比较两个操作数都保证是相同类型,两个运算符被指定为执行完全相同的步骤,并且除非编译器优化,否则它们的执行可能足够接近相同。因此,在这些情况下使用==over在文件大小方面略有优势。===

但是,有些人认为一致性更重要:===通常更接近您在测试相等性时的意图,并且仅使用===and!==是许多人认为有用且可读的东西。就个人而言,我有相反的规则,只有===在操作数类型不确定时才使用,但我不会推荐任何一种方式。

如果您了解严格相等和非严格相等之间的区别,并且您确信使用==并且!=不会导致您或其他任何人在将来使用您的代码时出现任何阅读和理解代码的问题,请继续使用它们。

于 2012-04-21T14:37:40.470 回答
1

据推测,推荐一个而不是另一个的博客这样做是出于与类似操作的逻辑一致性的原因,而不是为了速度。试图修剪你的 Javascript 程序以从脚本中删除单个字符是不明智的。在提供服务之前通过 minify 或其他自动化工具运行它是一回事,但是手动调整 Javascript 以实现最小文件大小或单个操作数级别的执行速度是一项没完没了、吃力不讨好的任务,这将使您的网站更难维护。

使用对您来说更具逻辑意义的任何操作数,这样当您两年后不记得这条查询线时,您就不会感到困惑。

于 2012-04-21T14:38:05.853 回答
1
var test="1";
console.log(test==1); // true
console.log(test===1); // false

==检查 test 是否有 1 但===检查 test 是否有 1 并检查它的数据类型。在这种情况下,第二个表达式为假,因为它的数据类型是字符串(测试是字符串),但右手操作数不是字符串。下面的测试不同

var test=1;
console.log(test==1); // true
console.log(test===1);​ // true

因为 test 包含Integer评估为Booleantrue 的 1 和右手操作数也是相同的。===还检查两个操作数是否类型。

于 2012-04-21T14:38:22.980 回答
1

如果我可以引用 Douglas Crockford 的Javascript: The Good Parts 的话:

JavaScript 有两组相等运算符:=== 和 !==,以及它们的邪恶双胞胎 == 和 !=。好的工作按您期望的方式工作。如果两个操作数的类型相同且值相同,则 === 产生真,!== 产生假。当操作数是相同类型时,邪恶双胞胎会做正确的事情,但如果它们是不同类型,它们会尝试强制值。他们这样做的规则既复杂又难以记忆……缺乏传递性令人担忧。我的建议是永远不要使用邪恶的双胞胎。相反,请始终使用 === 和 !==。

无论是否存在性能差异,都很难证明使用“邪恶双胞胎”的合理性。

于 2012-04-21T14:48:01.013 回答