Javascript/Node.js中的函数是如何在内部表示的?

Javascript/Node.js中的函数是如何在内部表示的?,javascript,node.js,json,Javascript,Node.js,Json,我最近发现JSON值只能存储字符串、数字、对象、数组、true、false或null。但据我所知,JSON是Javascript在内部表示其对象的方式。我不明白如果大多数对象都有方法(即函数),如何将Javascript对象存储为JSON?函数不是对象吗?我的Javascript解释器(Node.js)认为函数到底是什么?它是如何表示它们的?谢谢 JSON是一种字符串交换格式。它代表JavaScript对象表示法。它是在Javascript之后很久才发明的,与Javascript如何在内部存储数

我最近发现JSON值只能存储字符串、数字、对象、数组、true、false或null。但据我所知,JSON是Javascript在内部表示其对象的方式。我不明白如果大多数对象都有方法(即函数),如何将Javascript对象存储为JSON?函数不是对象吗?我的Javascript解释器(Node.js)认为函数到底是什么?它是如何表示它们的?谢谢

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

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

然后,JSON的接收者可以将其解析回其本地数据。JSON甚至被用来从JavaScript程序发送数据到用另一种语言编写的程序(Python、露比、C++等)。 函数与JSON完全没有连接。它们不存储在JSON中。JS解释器中的内部存储格式特定于任何解释器实现,外部世界无法访问或受任何标准管辖。这是任何Javascript引擎的实现细节,他们可以随心所欲地执行,每个解释器可能都有自己的实现或变体。我不知道这对Javascript代码有什么影响

我最近发现JSON值只能存储字符串、数字、对象、数组、true、false或null。但据我所知,JSON是Javascript在内部表示其对象的方式

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

我不明白如果大多数对象都有方法(即函数),如何将Javascript对象存储为JSON

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

函数不是对象吗

是的,但它们与JSON无关

我的Javascript解释器(Node.js)认为函数到底是什么?它是如何表示它们的

每个JS解释器都有自己的内部函数实现/存储。它不受任何标准的约束,在很大程度上与如何用Javascript编写代码无关


如果您有理由想知道特定Javascript实现如何在内部存储其变量,则必须查看源代码。谷歌(用于Chrome和No.js)的V8实现和Mozilla的Firefox实现都是开源的,你可以深入到该代码中(它主要是C++代码)。 这可能会变得非常复杂,因为一些数据类型(如数组)根据数组的结构以各种不同的格式存储。我相信V8至少有三种阵列存储格式,这取决于阵列是压缩的还是稀疏的,以及它的总体大小。这是为了优化内存消耗和运行时性能

同样,如果与任意编程生成的属性相比,解释器从代码中提前获得了关于使用什么和不使用什么的信息,那么对象上的属性可以以高度优化的存储格式排列


仅供参考,您可以在这里找到Google repository:和Mozilla代码:。

但据我所知,JSON是Javascript在内部表示其对象的方式。不,那不对。JSON只不过是一种数据传输字符串格式。在内部,对象存储为键/值对的哈希表,值可以是任何合法的JavaScript原语或对象类型。除@ScottMarcus注释外,JSON不是JS对象。它的表示法与JS对象类似。它们是两种不同的东西。@ScottMarcus谢谢你!我想看看JS函数的内部哈希表实际上是什么样子的。我可以通过Node.JS控制台告诉JS显示我创建的函数的哈希表吗?你不能。这不是ECMAScript标准定义的,而是特定于实现的。您必须深入了解每个客户机的源代码,看看他们是如何处理的。坦白说,你为什么要这么做?任何编程语言(除了汇编语言)的全部目的都是抽象这些东西。@ScottMarcus我不需要,只是为了好玩