资讯专栏INFORMATION COLUMN

JavaScript高级程序设计-摘要笔记-6

Batkid / 364人阅读

摘要:关于对象定义了全局对象。支持的浏览器有除了接受要序列化的对象外,还可以接受另外两个参数。如果是数值,则表示每个级别缩进的空格数,最大,超过的值自动转换成。字符串长度超过,结果中将只出现前个字符。会在结果字符串中插入换行符提高可读性。

关于JSON 1. JSON 对象

es5 定义了全局对象 JSON。
支持的浏览器有 IE8+ 、Firefox 3.5+ 、Safari 4+、Chrome、Opera 10.5+

2. JSON.stringify()

JSON.stringify() 除了接受要序列化的对象外,还可以接受另外两个参数。
第一个参数是一个过滤器,可以是一个数组或函数,第二个参数是一个选项,表示是否在JSON字符串中保留缩进。
如:

var book = {
  title: "Professional JS",
  authors: ["abc", "def"],
  edition: 3,
  year: 2011
}

第一个参数是数组

var jsonText1 = JSON.stringify(book, ["title", "edition"])
console.log(jsonText1) // "{"title":"Professional JS","edition":3}"

第一个参数是函数

var jsonText2 = JSON.stringify(book, function (key, value) {
  switch (key) {
    case "authors":
      return value.join(",");
    case "year":
      return 2016;
    case "edition":
      return undefined;
    default:
      return value;
  }
})
console.log(jsonText2) // "{"title":"Professional JS","authors":"abc,def","year":2016}"

第二个参数用于控制结果中的缩进和空白符。
如果是数值,则表示每个级别缩进的空格数,最大10,超过10 的值自动转换成10。
如果是字符串,则用作缩进字符。字符串长度超过10,结果中将只出现前10个字符。
会在结果字符串中插入换行符提高可读性。
如:

var jsonText3 = JSON.stringify(book, null, 6)
console.log(jsonText3)
// "{
//       "title": "Professional JS",
//       "authors": [
//             "abc",
//             "def"
//       ],
//       "edition": 3,
//       "year": 2011
// }"
var jsonText4 = JSON.stringify(book, null, "--")
console.log(jsonText4)
// "{
// --"title": "Professional JS",
// --"authors": [
// ----"abc",
// ----"def"
// --],
// --"edition": 3,
// --"year": 2011
// }"
3. toJSON() 方法

可以给对象定义 toJSON() 方法,返回自身的 JSON 数据格式,此方法优先级最高
如:

var book = {
  title: "Professional JS",
  authors: ["abc", "def"],
  edition: 3,
  year: 2011,
  toJSON: function () {
    return {
      name: "wfc"
    }
  }
}
var jsonText = JSON.stringify(book, null, 1)
console.log(jsonText)
// "{
//  "name": "wfc"
// }"

注意: JSON.stringify() 处理的优先级为 toJSON() => 第二个参数 => 第三个参数。
4. JSON.parse()

JSON.parse() 接受另一个参数,该参数是一个函数,将在每个健值对上采用,类似于 JSON.stringify() 的过滤函数。
如:

var book = {
  title: "Professional JS",
  authors: ["abc", "def"],
  edition: 3,
  year: 2011,
  releaseDate: new Date(2016,11,22)
}
var jsonText = JSON.stringify(book, null, 1)
console.log(jsonText)
// "
// json.html:48 {
//  "title": "Professional JS",
//  "authors": [
//   "abc",
//   "def"
//  ],
//  "edition": 3,
//  "year": 2011,
//  "releaseDate": "2016-12-21T16:00:00.000Z"
// }"
var copyBook = JSON.parse(jsonText, function (key, value) {
  if (key === "releaseDate") {
    console.log(value) // "2016-12-21T16:00:00.000Z"
    return new Date(value)
  } else {
    return value
  }
})

JSON部分结束

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81202.html

相关文章

  • JavaScript高级程序设计摘要笔记-3

    摘要:如果重设构造函数的原型对象,那么,会切断新的原型对象和任何之前已经存在的构造函数实例之间的联系,它们引用的仍然是最初的原型。说明返回的对象与构造函数或者与构造函数的原型属性没有关系。 说明: 此摘要笔记系列是我最近看《JavaScript高级程序设计(第3版)》随手所记。里面分条列举了一些我认为重要的、需要记下的、对我有帮助的点,是按照我看的顺序来的。摘要笔记本身没有系统性,没有全面性...

    AndroidTraveler 评论0 收藏0
  • JavaScript高级程序设计摘要笔记-1

    摘要:说明此摘要笔记系列是我最近看高级程序设计第版随手所记。摘要笔记本身没有系统性,没有全面性可言,写在这里供有一定基础的前端开发者参考交流。对每一项运行给定函数,返回该函数会返回的项组成的数组。是的反操作是的反操作第一部分结束。 说明: 此摘要笔记系列是我最近看《JavaScript高级程序设计(第3版)》随手所记。 里面分条列举了一些我认为重要的、需要记下的、对我有帮助的点,是按照我看...

    chavesgu 评论0 收藏0
  • JavaScript高级程序设计摘要笔记-4

    摘要:思路是,使用原型链对原型属性和方法进行继承,借用构造函数实现对实例属性的继承。注意使用寄生式继承来为对象添加函数,会由于不能做到函数复用而降低效率,这一点与构造函数模式类似。无论什么情况下都会调用两次超类型的构造函数。 说明: 此摘要笔记系列是我最近看《JavaScript高级程序设计(第3版)》随手所记。里面分条列举了一些我认为重要的、需要记下的、对我有帮助的点,是按照我看的顺序来的...

    zr_hebo 评论0 收藏0
  • JavaScript高级程序设计摘要笔记-5

    摘要:函数表达式和闭包函数声明的一个重要特征是函数声明提升如递归递归函数是在一个函数通过名字调用自身的情况下构成的。注意中已经是块级作用域了,所以这些东西感觉实际用途没有那么大,但是对理解闭包对作用域链中的属性的引用,这一点还是有作用的。 函数表达式和闭包 1. 函数声明的一个重要特征是函数声明提升 如: sayHi() function sayHi () { console.log(h...

    JerryWangSAP 评论0 收藏0
  • JavaScript高级程序设计摘要笔记-2

    摘要:说明此摘要笔记系列是我最近看高级程序设计第版随手所记。其中,描述符对象的属性必须是设置其中一个或多个值,可以修改对应的特性值。如支持的浏览器,可以取得指定属性的描述符。 说明: 此摘要笔记系列是我最近看《JavaScript高级程序设计(第3版)》随手所记。里面分条列举了一些我认为重要的、需要记下的、对我有帮助的点,是按照我看的顺序来的。摘要笔记本身没有系统性,没有全面性可言,写在这里...

    roland_reed 评论0 收藏0

发表评论

0条评论

Batkid

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<