【问题标题】:can JSON serialize an array that uses *functions* as keys?JSON 可以序列化使用 *functions* 作为键的数组吗?
【发布时间】:2010-10-24 11:19:14
【问题描述】:

我正在涉足语言学 Javascript 项目。我想使用对象来表示名词和函数来存储动词来构建它,因为这使得我的项目概念化变得不那么困难。我使用函数作为对象的键(我在下面编写了一个示例)。当需要保存数据时,是否可以使用 JSON 序列化它。

function verbFn() {
   //do something
}

var nouns = {};

nouns[verbFn] = 'some value';

在本例中,JSON 是否能够序列化“名词”?


呃...在思考了我最初的问题并阅读了 cmets 之后,我得出的结论是,尝试以这种方式做事是非常错误和愚蠢的。

【问题讨论】:

  • 欢迎对使用函数作为键的缺点提出任何其他想法(除了“wtf,为什么?”)。我很惊讶它似乎完全有效,但我以前从未有过这样做的理由,所以我不确定会发生什么。
  • 看看我的回答 - 它可能没有按照你的想法做

标签: javascript json semantics


【解决方案1】:

不,JSON 不能这样做。 键必须是双引号字符串。

而且看起来您实际上并没有将该函数用作键 - 它正在被转换为字符串:

<script>

var x = {};
x[window.open] = true;

for (var i in x)
    alert(typeof i + '\n' + i); // typeof i == string

</script>

【讨论】:

  • 酷 - 我错误地认为正在使用某种指向函数的内部指针,但尽管如此,这可能是可行的。因为函数名被保存为字符串的一部分,所以我不会用同一个键两次结束。我只需要评估保存到数据库的函数。优点是在设计过程中,使用函数可以让名词、动词的跟踪更清晰。
  • ...虽然你永远不会从我上面使用的凌乱的脑叶切除样本中猜到 ;-)
【解决方案2】:

根据standards 不,你不能。键必须是字符串

【讨论】:

    【解决方案3】:

    不,键应该始终是字符串,而不是其他任何东西。见the standard description

    nouns 不是数组,它是映射、哈希表、关联数组、“对象”,其中之一,无论你喜欢什么名称。

    【讨论】:

      【解决方案4】:

      JSON 是一种数据结构语法。函数不是数据,因此无法将其序列化为数据结构(键或其他)的一部分。无论是语言、实现还是其他。

      【讨论】:

        【解决方案5】:

        您并没有真正使用函数作为键——您使用的是函数的字符串转换作为键,这也隐含地依赖于这些字符串表示是唯一的。对于支持反编译函数的平台,这可以正常工作,但理论上可能存在只返回“[function]”的实现,这在你的情况下会非常糟糕。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-06
          • 1970-01-01
          • 2011-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多