==, ===, Object.is(value1, value2) 在 JavaScript 中用于比较值。这将返回 true 或 false。我想知道这些比较器之间是否存在内存使用差异。
示例用法, 如果(值 1 == 值 2){}
if(值 1 === 值 2){}
if (Object.is(value1, value2) {}
阅读文档。
这不是那么容易回答,因为这完全取决于实现。这种“幕后行为”没有被 ECMA 指定/标准化,所以你必须单独对一些 JavaScript 引擎进行基准测试。
以V8为例:如果比较相同的类型,
==
和===
都使用完全相同的算法。理论上 ==
应该总是比 ===
慢,因为“等于”实际上在内部调用“严格等于”。但是内存使用差异是如此之小,考虑到还涉及其他因素,您甚至无法准确地对其进行基准测试。
但话又说回来,这完全取决于实现,我想说内存使用方面的实际差异完全微不足道。
所以实际回答你的问题:
我想知道这些比较器之间是否存在内存使用差异。
总会有一些不同,但你永远不会注意到。
运算符由 JavaScript 引擎在计算表达式的过程中执行。执行的代码可能是用比 JS 更底层的语言编写的,并利用了运行时堆栈。但是在求值的时候只会有使用内存留下的比较结果。
表达式中的中间结果可能至少暂时被推入计算堆栈。根据引擎的不同,布尔结果可能最多占用 64 位,这可能取决于引擎如何存储原始值。
运算符评估必须经过的步骤规范,包括或不包括自动类型转换,可以在 ECMAScript 标准中找到。请注意,这些是概念性步骤,可能不代表顺序或考虑实际脚本引擎执行的所有优化。
谨防假设选择一个运算符而不是另一个运算符,或者运算符的顺序可能会带来巨大的性能提升。运算符的评估可能只是 JavaScript 编译器要求运行时引擎执行的操作的一小部分,并且在某些情况下可能取决于提供给运算符的操作数的类型。