一尘不染

RegExp的序列化

json

因此,我很感兴趣地发现JSON.stringify将RegExp减少为空的对象字面量(fiddle):

JSON.stringify(/^[0-9]+$/) // "{}"

这是预期的行为吗?我意识到RegExp是一个没有序列化属性的对象。也就是说,日期也是对象。却JSON.stringify()设法产生了一个有意义的字符串:

JSON.stringify(new Date) // "2014-07-03T13:42:47.905Z"

我本来希望JSON通过使用来给RegExp同样的考虑。RegExp.prototype.[toString()](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/toString)


阅读 238

收藏
2020-07-27

共1个答案

一尘不染

是的,因为在JSON中没有RegExp对象的规范表示。因此,它只是一个空对象。

编辑 -现在是2018年;暗示使用.toJSON()etc的解决方案的答案可能很好,尽管我会将该方法添加到原型中

Object.defineProperty(RegExp.prototype, "toJSON", {
  value: RegExp.prototype.toString
});

等等。这样可以确保函数名称不可枚举,从而使猴子补丁程序更加卫生。

2020-07-27