JSON.stringify() 方法能将一个 JavaScript 对象或值转换成一个 JSON 字符串。

作为一名 JavaScript 开发人员,JSON.stringify() 是用于调试的最常见函数。但是它的作用是什么呢,难道我们不能使用 console.log() 来做同样的事情吗?让我们试一试。

//初始化一个 user 对象
const user = {
"name": "Prateek Singh",
"age": 26
}
console.log(user);
// 结果
// [object Object]

哦!console.log() 没有帮助我们打印出期望的结果。它输出 [object Object],因为从对象到字符串的默认转换是 [object Object]。

因此,我们使用 JSON.stringify() 首先将对象转换成字符串,然后在控制台中打印,如下所示。

const user = {
"name": "Prateek Singh",
"age": 26
}
console.log(JSON.stringify(user));
// 结果
// "{ "name" : "Prateek Singh", "age" : 26 }"

一般来说,开发人员使用 stringify 函数的场景较为普遍,就像我们在上面做的那样。但我要告诉你一些隐藏的秘密,这些小秘密会让你开发起来更加轻松。

第二个参数(数组)

是的,stringify 函数也可以有第二个参数。它是要在控制台中打印的对象的键数组。看起来很简单?让我们更深入一点。我们有一个对象 product 并且我们想知道 product 的 name 属性值。当我们将其打印出来:

console.log(JSON.stringify(product));

它会输出下面的结果。

{"id":"0001","type":"donut","name":"Cake","ppu":0.55,"batters":{"batter":[{"id":"1001","type":"Regular"},{"id":"1002","type":"Chocolate"},{"id":"1003","type":"Blueberry"},{"id":"1004","type":"Devil’s Food"}]},"topping":[{"id":"5001","type":"None"},{"id":"5002","type":"Glazed"},{"id":"5005","type":"Sugar"},{"id":"5007","type":"Powdered Sugar"},{"id":"5006","type":"Chocolate with Sprinkles"},{"id":"5003","type":"Chocolate"},{"id":"5004","type":"Maple"}]}

在日志中很难找到 name 键,因为控制台上显示了很多没用的信息。当对象变大时,查找属性的难度增加。stringify 函数的第二个参数这时就有用了。让我们重写代码并查看结果。

console.log(JSON.stringify(product,['name']);
// 结果
{"name": "Cake"}

问题解决了,与打印整个 JSON 对象不同,我们可以在第二个参数中将所需的键作为数组传递,从而只打印所需的属性。

第二个参数(函数)

我们还可以传入函数作为第二个参数。它根据函数中写入的逻辑来计算每个键值对。如果返回 undefined,则不会打印键值对。请参考示例以获得更好的理解。

const user = {
"name": "Prateek Singh",
"age": 26
}

// 结果
{ "age": 26}

只有 age 被打印出来,因为函数判断 typeOf 为 String 的值返回 undefined。

第三个参数为数字

第三个参数控制最后一个字符串的间距。如果参数是一个数字,则字符串化中的每个级别都将缩进这个数量的空格字符。

// 注意:为了达到理解的目的,使用 '--' 替代了空格
JSON.stringify(user, null, 2);
//{
//--"name": "Prateek Singh",
//--"age": 26,
//--"country": "India"
//}

第三个参数为字符串

如果第三个参数是 string,那么将使用它来代替上面显示的空格字符。

JSON.stringify(user, null,'**');
//{
//**"name": "Prateek Singh",
//**"age": 26,
//**"country": "India"
//}
// 这里 * 取代了空格字符

toJSON 方法

我们有一个叫 toJSON 的方法,它可以作为任意对象的属性。

JSON.stringify 返回这个函数的结果并对其进行序列化,而不是将整个对象转换为字符串。参考下面的例子。

const user = {firstName : "Prateek",lastName : "Singh",age : 26,toJSON() {
return{fullName: `${this.firstName} + ${this.lastName}`
};
}
}
console.log(JSON.stringify(user));
// 结果
// "{ "fullName" : "Prateek Singh"}"

这里我们可以看到,它只打印 toJSON 函数的结果,而不是打印整个对象。

我希望你能学到 stringify() 的一些基本特征。

关于本文译者:@zoomdong译文:https://juejin.im/post/5e842da76fb9a03c854610c7校对者:@Long Xiong,@niayyy作者:@Prateek Singh原文:https://medium.com/javascript-in-plain-english/5-secret-features-of-json-stringify-c699340f9f27

文章推荐程序员效率:画流程图常用的工具程序员效率:整理常用的在线笔记软件远程办公:常用的远程协助软件,你都知道吗?51单片机程序下载、ISP及串口基础知识硬件:断路器、接触器、继电器基础知识

前端:JSON.stringify() 的 5 个秘密特性相关推荐

  1. 大多数开发人员都不知道的JSON.stringify 秘密

    作为前端开发工程师,你一定用过JSON.stringify,但你知道它的全部秘密吗? 基本上,JSON.stringify 将对象转换为 JSON 字符串.同时,JSON.stringify 有如下规 ...

  2. 9 个JSON.stringify 的秘密大多数开发人员却不知道

    前端Q 我是winty,专注分享前端知识和各类前端资源,乐于分享各种有趣的事,关注我,一起做个有趣的人- 公众号 点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 英文 | https:/ ...

  3. 前端必知必会--JSON.stringify()犀利的第三个参数

    作者: 小华坚决上王者 建议阅读时间: 2 min 博客原文 JSON.stringify()是个经常使用的前端方法,这个函数可以传入三个参数,这里我安利下第三个参数,专门用来美化输出,先看下语法: ...

  4. 前端 优化 json stringify 在IE浏览器的兼容性 按钮点击不生效

    这是一个系列,记录我前端开发常用的代码,小常识,有些是参考网上代码,(讲的可能有点烂,求不要打脸,嘤嘤嘤~~)送给那些需要的人.可以相互交流,喜欢的加我吧. Wx: Lxp911221 项目:后端管理 ...

  5. 前端需要知道的JSON.stringify的正确用法

    1.API介绍 MDN官网简介:JSON.stringify(value, replacer, space) 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 rep ...

  6. 前端 JavaScript 中 JSON.stringify() 的基本用法

    前言 在开发工作中,我们可能会碰到这样的需求:需要将某个对象内容弹窗显示或者保存在文件中,这时候如果你直接弹窗的话,很可能就是下面这样的: 因为很多接口它对参数有要求,比如只能是字符串之类的. 这时候 ...

  7. 一文搞懂JSON.stringify和JSON.parse(五)JSON.parse使用说明

    一 JSON.parse特性 JSON.parse()就是将JSON字符串解析成字符串描述的JavaScript值或对象(将JSON数据解析为js原生值),例如: JSON.parse('{}'); ...

  8. php json.parse,JSON.parse()与JSON.stringify()和eval()使用方法详解

    这次给大家带来JSON.parse()与JSON.stringify()和eval()使用方法详解,JSON.parse()与JSON.stringify()和eval()使用的注意事项有哪些,下面就 ...

  9. JSON.stringify()和JOSN.parse()

    JSON.stringify()跟JSON.parse() 终于把这两个方法搞清楚了!!! JSON.tringify():把一个json数据转化成JSON string JSON.stringify ...

最新文章

  1. oracle显示多表数据,Oracle DB 使用连接显示多个表中的数据
  2. (四十三)java版spring cloud+spring boot+redis多租户社交电子商务平台-eureka集群整合config配置中心...
  3. PHP下的Oauth2.0尝试 - OpenID Connect
  4. r型聚类典型指标_文献解读 | 缺陷和非缺陷型精神分裂症脑网络功能紊乱的共性和异性...
  5. ByteBuffer源码分析
  6. batch lr替代关系_建立关系的替代方法
  7. 【C++】如何提高Cache的命中率,示例
  8. 你从未见过的 HTML5 动画效果
  9. html翻译插件,翻译插件:ImTranslator
  10. 基于数据要素流通视角的数据溯源研究进展
  11. 栈的压入、弹出序列和栈所有可能的弹出顺序
  12. 梯度下降——雏凤清于老凤声
  13. 寒江独钓:Windows内核安全编程(china-pub到货首发)
  14. java端口是多少钱_Java 接口,最少必要知识
  15. 20145212 罗天晨 WEB登陆发贴及会话管理功能的实现
  16. C1-01基础任务和知识拓展
  17. MUMU模拟器启动时提示MuMu App Player已停止工作
  18. Qt鼠标拖拽窗口移动事件
  19. 开源OA协同办公搭建教程:使用认证鉴权对服务访问进行限制(invoke)
  20. UltraEdit+注册机+激活方法

热门文章

  1. 谷歌退出中国几成定局 谈判已谈崩
  2. Design Compiler指南——设计综合过程
  3. 如何判断一条曲线是否自己相交?
  4. 数字信号处理笔记1-信号与常见操作
  5. 将bgr彩色矩阵归一化到0-255之间 【RGB image normalization】
  6. 计算机启动时运行ccleaner,Ccleaner的使用方法
  7. python实现深度优先搜索_python中的深度优先搜索算法
  8. java compile_java中的CompileAPI入门及使用
  9. html5清除手机页面缓存文件夹,WebView自动缓存-清除缓存
  10. java socket 判断Socket连接失效