为什么JSON.parse的第二个参数称为“reviver”?

时间:2016-07-15 08:27:13

标签: javascript json terminology

来自MDN documentation

  
      
  • reviver (可选)

         

    如果函数在返回之前规定了解析最初产生的值的转换方式。

  •   

它的名字让我觉得奇怪。也许我在这里错过了一个比喻 - 为什么这会被称为“复活”一个对象?这样的变压器功能有没有历史被称为“复活者”?谷歌搜索reviver +javascript表明JSON.parse基本上是唯一使用此术语的地方。

2 个答案:

答案 0 :(得分:3)

我们的想法是,原生的Javascript对象,例如Number(42),是您的" live"对象。当您将这些序列化为JSON表示时,他们会干涸"或者#34; dumbed down"或者您想要称之为的任何内容。要重新获得新鲜的Javascript对象,您需要恢复"复活"他们来自简单的文字表示。

如果您使用更复杂的对象,这一点就会变得更加明显:

function Foo(bar) {
    this.bar = bar;
}

Foo.prototype.baz = function () {
    alert(this.bar);
};

var f = Foo(42);
f.baz();
f = JSON.parse(JSON.stringify(f));
f.baz();  // Nope

要获得具有baz方法的原始对象,您需要做的不仅仅是parse它。这是"复兴"一部分。

答案 1 :(得分:1)

parse函数用于从已序列化为字符串的数据创建对象。默认情况下,它所能做的只是将数据重构为具有一堆属性的普通对象。

有时,您可能希望“将这些值恢复生机”(即将其复活)成为具有方法,行为等的完整对象,甚至是具有特定类型的对象而不仅仅是JSON.parse()默认生成的毫无生命的容器。

我会说这就是为什么它被称为reviver