使用比较器(例如“==”、“===”和 Object.is() 方法)时,javascript 中的内存使用量是多少?

问题描述 投票:0回答:2

==, ===, Object.is(value1, value2) 在 JavaScript 中用于比较值。这将返回 true 或 false。我想知道这些比较器之间是否存在内存使用差异。

示例用法, 如果(值 1 == 值 2){}

if(值 1 === 值 2){}

if (Object.is(value1, value2) {}

阅读文档。

javascript memory-management boolean compare usage-statistics
2个回答
0
投票

这不是那么容易回答,因为这完全取决于实现。这种“幕后行为”没有被 ECMA 指定/标准化,所以你必须单独对一些 JavaScript 引擎进行基准测试。

以V8为例:如果比较相同的类型,

==
===
都使用完全相同的算法。理论上
==
应该总是比
===
慢,因为“等于”实际上在内部调用“严格等于”。但是内存使用差异是如此之小,考虑到还涉及其他因素,您甚至无法准确地对其进行基准测试。

但话又说回来,这完全取决于实现,我想说内存使用方面的实际差异完全微不足道。

所以实际回答你的问题:

我想知道这些比较器之间是否存在内存使用差异。

总会有一些不同,但你永远不会注意到。


0
投票

运算符由 JavaScript 引擎在计算表达式的过程中执行。执行的代码可能是用比 JS 更底层的语言编写的,并利用了运行时堆栈。但是在求值的时候只会有使用内存留下的比较结果。

表达式中的中间结果可能至少暂时被推入计算堆栈。根据引擎的不同,布尔结果可能最多占用 64 位,这可能取决于引擎如何存储原始值。

运算符评估必须经过的步骤规范,包括或不包括自动类型转换,可以在 ECMAScript 标准中找到。请注意,这些是概念性步骤,可能不代表顺序或考虑实际脚本引擎执行的所有优化。

谨防假设选择一个运算符而不是另一个运算符,或者运算符的顺序可能会带来巨大的性能提升。运算符的评估可能只是 JavaScript 编译器要求运行时引擎执行的操作的一小部分,并且在某些情况下可能取决于提供给运算符的操作数的类型。

© www.soinside.com 2019 - 2024. All rights reserved.