有没有一种方法可以检查Javascript变量的内存地址?

28

现代 JavaScript 或 TypeScript 中是否可以找到变量的内存地址?

我对值传递和引用传递感到困惑,使用内存地址可以更容易地理解实际情况。现在我们有了 ES8 和 TypeScript,但仍然无法获取变量和对象的内存地址。


有几个答案被发布了,但我想说真正的问题是:你为什么需要这个? - Máté Safranka
那么在TypeScript中变量怎么样呢? - SAURABH
1
我需要这个答案,因为我读了很多有关传值和引用传递的帖子和文档,但由于内存管理,甚至没有一个人确信实际情况。 - SAURABH
3个回答

12

来自这篇文章

这几乎是不可能的 - JavaScript 的求值策略始终使用按值调用,但在对象(包括数组)的情况下,传递的值是对该对象的引用,并未被复制或克隆。如果您在函数中重新分配对象本身,则原始对象将不会更改,但是如果您重新分配对象的其中一个属性,则会影响到原始对象。


5
为了使用按引用传递(pass by reference)的方式,我们需要知道标识符(identifiers)的内存地址。 - SAURABH

6

我所知道的所有JavaScript运行时都会将这个隐藏起来。

然而,您可以通过使用Typed Arrays和基于要存储的数据类型的适当缓冲区视图来模拟内存指针的行为。您可以通过在特定的偏移量处保存数据,然后将该偏移量传递给不同的函数来直接操作类型化数组中的数据,从而模拟指针:也就是说,偏移量充当低级指针。


5

JavaScript本身意味着与实现无关,因此像内存地址这样的概念在语言本身中是故意缺失的。在语言之外,您可以使用浏览器的调试工具来进行内存快照,并且其中可能包含该信息。但请注意,没有真正的保证对象将保留其地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接