javascript基础从小白到高手系列四百零五:字符串缩进

本文详细解释了JSON.stringify()方法的第三个参数如何控制缩进和空格,介绍了toJSON()方法的作用以及如何自定义对象的序列化过程,包括使用过滤函数的顺序规则。
摘要由CSDN通过智能技术生成

JSON.stringify()方法的第三个参数控制缩进和空格。在这个参数是数值时,表示每一级缩进的
空格数。例如,每级缩进4 个空格,可以这样:
let book = {
title: “Professional JavaScript”,
authors: [
“Nicholas C. Zakas”,
“Matt Frisbie”
],
edition: 4,
year: 2017
};
let jsonText = JSON.stringify(book, null, 4);
这样得到的jsonText 格式如下:
{
“title”: “Professional JavaScript”,
“authors”: [
“Nicholas C. Zakas”,
“Matt Frisbie”
],
“edition”: 4,
“year”: 2017
}
注意,除了缩进,JSON.stringify()方法还为方便阅读插入了换行符。这个行为对于所有有效的缩进参数都会发生。(只缩进不换行也没什么用。)最大缩进值为10,大于10 的值会自动设置为10。
如果缩进参数是一个字符串而非数值,那么JSON字符串中就会使用这个字符串而不是空格来缩进。
使用字符串,也可以将缩进字符设置为Tab 或任意字符,如两个连字符:
let jsonText = JSON.stringify(book, null, “–” );
这样,jsonText 的值会变成如下格式:
{
–“title”: “Professional JavaScript”,
–“authors”: [
----“Nicholas C. Zakas”,
----“Matt Frisbie”
–],
–“edition”: 4,
–“year”: 2017
}
使用字符串时同样有10 个字符的长度限制。如果字符串长度超过10,则会在第10 个字符处截断。
toJSON()方法
有时候,对象需要在JSON.stringify()之上自定义JSON 序列化。此时,可以在要序列化的对象
中添加toJSON()方法,序列化时会基于这个方法返回适当的JSON 表示。事实上,原生Date 对象就
有一个toJSON()方法,能够自动将JavaScript 的Date 对象转换为ISO 8601 日期字符串(本质上与在
Date 对象上调用toISOString()方法一样)。
下面的对象为自定义序列化而添加了一个toJSON()方法:
let book = {
title: “Professional JavaScript”,
authors: [
“Nicholas C. Zakas”,
“Matt Frisbie”
],
edition: 4,
year: 2017,
toJSON: function() {
return this.title;
}
};
let jsonText = JSON.stringify(book);
这里book 对象中定义的toJSON()方法简单地返回了图书的书名(this.title)。与Date 对象
类似,这个对象会被序列化为简单字符串而非对象。toJSON()方法可以返回任意序列化值,都可以起
到相应的作用。如果对象被嵌入在另一个对象中,返回undefined 会导致值变成null;或者如果是顶
级对象,则本身就是undefined。注意,箭头函数不能用来定义toJSON()方法。主要原因是箭头函数
的词法作用域是全局作用域,在这种情况下不合适。
toJSON()方法可以与过滤函数一起使用,因此理解不同序列化流程的顺序非常重要。在把对象传
给JSON.stringify()时会执行如下步骤。
(1) 如果可以获取实际的值,则调用toJSON()方法获取实际的值,否则使用默认的序列化。
(2) 如果提供了第二个参数,则应用过滤。传入过滤函数的值就是第(1)步返回的值。
(3) 第(2)步返回的每个值都会相应地进行序列化。
(4) 如果提供了第三个参数,则相应地进行缩进。
理解这个顺序有助于决定是创建toJSON()方法,还是使用过滤函数,抑或是两者都用。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值