代码之家  ›  专栏  ›  技术社区  ›  Alex V

在javascript/node.js中,函数是如何在内部表示的?

  •  -1
  • Alex V  · 技术社区  · 7 年前

    我最近发现JSON值只能存储字符串、数字、对象、数组、真、假或空。但据我所知,JSON是JavaScript如何在内部表示其对象的。如果大多数对象都有方法,哪些是函数,我不理解如何将javascript对象存储为JSON?函数不是对象吗?在我的javascript解释器(node.js)的观点中,函数到底是什么?它是如何表示它们的?谢谢!

    1 回复  |  直到 7 年前
        1
  •  3
  •   jfriend00    7 年前

    JSON是一种字符串交换格式。它代表 对象表示法 .它是在Javascript之后很久发明的,与Javascript如何在内部存储数据完全无关。

    JSON通常用作交换格式或存储格式。一种方法是获取一些JavaScript数据,将其序列化为JSON格式,并获取结果字符串,然后将其发送到另一个进程或计算机,或者将其保存到某种存储中。

    然后,JSON的接收者可以将其解析回其本地数据。JSON甚至被用来将数据从JavaScript程序发送到用另一种语言编写的程序(Python、露比、C++等)。

    函数与JSON完全没有连接。它们不存储在JSON中。JS解释器中的内部存储格式特定于任何解释器实现,外部世界无法访问或受任何标准控制。这是任何JavaScript引擎的实现细节,他们可以随心所欲地实现,每个解释器可能都有自己的实现或变体。我不知道这对你的javascript代码有什么影响。

    我最近发现JSON值只能存储字符串、数字、对象、数组、真、假或空。但据我所知,JSON是JavaScript如何在内部表示其对象的。

    这是不正确的。JSON不是JavaScript解释器内部用于其对象的东西。内部对象格式是特定于特定的JavaScript解释器的,不能被JavaScript代码访问,也不能在编写代码时真正相关。

    如果大多数对象都有方法,哪些是函数,我不理解如何将javascript对象存储为JSON?

    Javascript不将JSON用于内部存储,因此它与Javascript数据类型的内部实现完全无关。

    函数不是对象吗?

    是的,但它们与JSON无关。

    在我的javascript解释器(node.js)的观点中,函数到底是什么?它是如何表示它们的?

    每个JS解释器都有自己的内部实现/存储功能。它不受任何标准的控制,并且在很大程度上与您如何用JavaScript编写代码无关。


    如果您有理由想知道特定的JavaScript实现如何在内部存储其变量,那么您必须查看源代码。谷歌的V8实现(在Chrome和No.js中使用)和Mozilla的Firefox实现都是开源的,你可以深入到该代码中(它主要是C++代码)。

    这可能会变得相当复杂,因为一些数据类型(如数组)存储在各种不同的格式中,这取决于数组的结构。我相信V8至少有三种数组存储格式,这取决于数组是压缩的还是稀疏的,以及它的总体大小。这是为了优化内存消耗和运行时性能。

    同样,如果与任意程序生成的属性相比,解释器从代码中获得关于正在使用的和不使用的属性的高级信息,则对象上的属性可以以高度优化的存储格式排列。

    仅供参考,您可以在这里找到Google存储库: https://chromium.googlesource.com/v8/v8.git 这里的Mozilla代码是: https://hg.mozilla.org/ .