因此,我很感兴趣地发现JSON.stringify将RegExp减少为空的对象字面量(fiddle):
JSON.stringify
JSON.stringify(/^[0-9]+$/) // "{}"
这是预期的行为吗?我意识到RegExp是一个没有序列化属性的对象。也就是说,日期也是对象。却JSON.stringify()设法产生了一个有意义的字符串:
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)
RegExp.prototype.[toString()](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/toString)
是的,因为在JSON中没有RegExp对象的规范表示。因此,它只是一个空对象。
编辑 -现在是2018年;暗示使用.toJSON()etc的解决方案的答案可能很好,尽管我会将该方法添加到原型中
.toJSON()
Object.defineProperty(RegExp.prototype, "toJSON", { value: RegExp.prototype.toString });
等等。这样可以确保函数名称不可枚举,从而使猴子补丁程序更加卫生。