javascript - ES6 中有类似 object.toJSON 的东西吗?

标签 javascript ecmascript-6 babeljs

<分区>

我使用的是 ES6,我使用 Babel 将其转译为普通的 JavaScript。

我想将对象序列化为 JSON 格式,想知道 ES5、ES6 是否提供了方便的功能。

对于 MapsSets,ES7 中提出了一个 toJSON() 函数

最佳答案

您可以使用 JSON.stringify并将任何类型的变量传递给它(假设它可以用 JSON 表示)。

它适用于所有当前的浏览器;如果你需要一个真的旧浏览器的回退,你可以使用Crockford's JSON-js .

但是,请记住,对于对象,只有公共(public)属性会被序列化。没有通用的方法来动态序列化函数变量等。

这就是为什么一些特殊的对象类型会提供一个toJSON 或类似的方法。为了对任意对象使用这样的函数,您必须将一个函数作为第二个参数传递给 JSON.stringify,它检查是否存在 toJSON 函数。

例如,以下应该有效(未经测试,只是我的想法):

var jsonString = JSON.stringify(someLargeObject, function(key, value){
    return (value && typeof value.toJSON === 'function') 
        ? value.toJSON()
        : JSON.stringify(value);
});

如果您的 someLargeObject 包含一个带有 toJSON 方法的子对象,此代码将使用该对象的实现,否则使用 JSON.stringify .

关于javascript - ES6 中有类似 object.toJSON 的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32332196/

相关文章:

javascript - 没有再生器的 babel-plugin-transform-async-to-module-method

javascript - mobx 的 `action.bound` 和箭头函数在类函数上的区别?

javascript - 将node.js服务器的数据显示到html页面

javascript - 可以在文本文件中调用 html 和 css 标签吗?

javascript - Angular2-模态确认回调

javascript - 使用 ES6 编写的 React 组件获取 "cannot read property of undefined"

javascript - 静态函数继承

javascript - React项目简单导入不起作用

javascript - 如何在不移除子元素的情况下移除包装器(父元素)?

javascript - TSLint 合并导入