JSON.stringify()的5个秘密特性

开发 前端
JSON.stringify()是JavaScript开发人员最常用来调试的函数。但为什么用它呢,难道console.log()不能用来做同样的事情吗?不妨试试看。

 [[320249]]

JSON.stringify()是JavaScript开发人员最常用来调试的函数。但为什么用它呢,难道console.log()不能用来做同样的事情吗?不妨试试看。

 

  1. //Initialize a User object 
  2. const user = { 
  3.  “name” : “Prateek Singh”, 
  4.  “age” : 26 
  5. }console.log(user);RESULT 
  6. // [object Object] 

看!console.log()没有输出我们想要的结果。它输出了[object Object],因为从对象到字符串的默认转换是“[objectObject]”。因此,我们使用JSON.stringify()先将对象转换为字符串,然后把结果输入console控制台,如下所示。

  1. const user = { 
  2. name” : “Prateek Singh”, 
  3. “age” : 26 
  4. }console.log(JSON.stringify(user));RESULT 
  5. // "{ "name" : "Prateek Singh", "age" :26 }" 

通常,开发人员使用这个stringify函数的方式很简单,像上面那样操作就可以。但是接下来所展示的它隐藏的秘密,可以让你的生活变得轻松。

1:第二个参数(数组)

是的,stringify 函数也可以有第二个参数。它是你在控制台中输入对象的键数组。看起来简单吧?接下来仔细看看。我们有一个“产品”对象,并且想知道产品的名称。当我们输入:

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

它会给出以下结果。

  1. {“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’sFood”}]},”topping”:[{“id”:”5001",”type”:”None”},{“id”:”5002",”type”:”Glazed”},{“id”:”5005",”type”:”Sugar”},{“id”:”5007",”type”:”PowderedSugar”},{“id”:”5006",”type”:”Chocolate withSprinkles”},{“id”:”5003",”type”:”Chocolate”},{“id”:”5004",”type”:”Maple”}]} 

在记录里很难找到名称键,因为在控制台显示了很多无用的信息。当对象变大时,困难也随之增加。

stringify函数的第二个参数派上用场。不妨重写代码,看看结果如何。

  1. console.log(JSON.stringify(product,[‘name’]);//RESULT 
  2. {"name" : "Cake"

问题解决了,与输出整个JSON对象不同,我们可以只输出所需的键,通过在第二个参数中将其作为数组来传递。

2:第二个参数(函数)

也可以将第二个参数作为函数来传递。它根据函数中写入的逻辑计算每个键值对。如果返回未定义(undefined)的键值对就不会输出。想要更好地理解,可以参考下面这个例子。

  1. const user = { 
  2.  “name” : “Prateek Singh”, 
  3.  “age” : 26 
  4.  
  5.   
  6. Passing function as 2nd argument 
  7. // Result 
  8. "age" : 26 } 

只有age被输出,typeOf字符串的值会因为功能条件返回undefined。

3:第三个参数是数字

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

  1. Note: '--' represnts the spacingfor understanding purposeJSON.stringify(usernull, 2); 
  2. //{ 
  3. //--"name": "Prateek Singh", 
  4. //--"age": 26, 
  5. //--"country": "India" 
  6. //} 

4:第三个参数是字符串

如果第三个参数是字符串,则用它来代替上面显示的空格字符。

  1. JSON.stringify(usernull,'**'); 
  2. //{ 
  3. //**"name""Prateek Singh"
  4. //**"age": 26, 
  5. //**"country""India" 
  6. //} 
  7. Here * replace the space character

这里*替代空格字符。

5:toJSON函数

我们有一个名为toJSON的类函数,它的属性是可以作为任何对象的一部分。JSON.stringify返回这个函数的结果并对其进行字符串化,而不是将全部对象转换为字符串。看看下面的例子。

  1. const user = { 
  2. firstName : "Prateek"
  3. lastName : "Singh"
  4. age : 26, 
  5. toJSON() { 
  6.    return { 
  7.      fullName: `${this.firstName} +${this.lastName}` 
  8.    };}console.log(JSON.stringify(user));RESULT 
  9. // "{ "fullName" : "Prateek Singh"}" 

可以看到,它不是输出全部对象,而是只有toJSON函数的结果。

希望你能从stringify()身上学到知识。

 

责任编辑:华轩 来源: 今日头条
相关推荐

2020-05-25 14:37:31

JSON.string前端秘密特性

2024-09-30 11:08:18

JSON局限性数据

2021-05-06 05:30:33

JSONstringify()parse()

2021-12-11 18:59:35

JavascriptJSON应用

2019-06-11 15:25:03

JSON性能前端

2022-12-05 14:50:53

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2022-08-31 22:50:13

JavaScript函数JSON

2023-01-17 16:25:18

前端开发JSON

2024-03-25 00:10:00

JSON后端开发

2022-03-10 09:11:33

JavaScrip开发JSON

2024-05-08 08:32:25

架构

2011-10-19 16:19:27

iOS 5苹果

2015-06-11 09:55:49

程序员代码

2020-10-09 11:02:46

HTML5 特性

2011-08-17 10:04:13

vSphere 5虚拟化

2018-05-18 15:05:25

JavaJava 10新特性

2019-12-05 12:11:37

DevOps开发应用程序

2023-05-12 08:11:58

JavaScriptJSON克隆

2023-05-08 09:00:46

JSON深拷贝对象
点赞
收藏

51CTO技术栈公众号