zoukankan      html  css  js  c++  java
  • 读书笔记(01)

    coding

    JSON与JavaScript对象

    JSON是一种表示结构化数据的存储格式,语法格式上与JavasScript对象有些类似。

    TIPS: 与JavaScript对象的格式区别

    1. 不支持变量、函数或对象实例
    2. 字符串,属性名必须使用双引号
    3. 无需定义变量存储引用
    // JSON对象
    {
        "name": "KenTsang",
        "age": 27,
        "job": "Developer"
    }
    
    // js对象(该对象将作在后续例子引用)
    let person = {
        name: 'KenTsang',
        age: 27,
        job: 'Developer'
    }
    
    

    ES5定义了一个全局对象JSON,IE8+以上支持,该对象提供来stringifyparse两个方法用于JSON数据解析和序列化。

    stringify()

    stringify用于把JavaScript对象序列化JSON字符串,

    在序列化JavaScript对象时,所有函数及原型成员都会被有意忽略,不体现在结果中。此外,值为undefined的任何属性也都会被跳过。

    JSON.stringify(
        value: Object, 
        replace: Array | function(key,value) {},
        space: number | string
    )
    

    该方法接受三个参数

    1. 参数:接收传入的js对象
    2. 参数:过滤器(数组/函数)
    3. 参数:字符串缩进(数值/字符串)

    参数2 - 过滤器

    TIPS1: 过滤器是一个数组时,序列化结果只包含数组中列出的属性

    let result = JSON.stringify(person, ["name", "job"]);
    
    // 输出结果
    // {"name":"KenTsang","job":"Developer"}
    

    TIPS2: 过滤器是一个函数时(替换函数)

    var jsonStr = JSON.stringify(Person, function(key, value){
        if (key == 'age') {
            return 'secret';
        } else {
            return value;
        }
    })
    
    // 输出结果
    // {"name":"KenTsang","age":"secret","job":"Developer"}
    

    如果替换函数返回的是undefined,则该属性不会被包含在序列化结果中。

    参数3 - 字符串缩进

    用于控制序列化结果中的缩进和空白符,输出序列结果带缩进格式,方便预览查看。实际应用开发不多。

    1. 为数值时,表示每个级别缩进的空格数(最大10)
    2. 为字符串时,则作为缩进字符(替换默认的空格,最大10个字符)
    let result = JSON.stringify(person, null, '--');
    
    // 输出结果
    /*
    {
    --"name": "KenTsang",
    --"age": 27,
    --"job": "Developer"
    }
    */
    

    toJSON()方法

    应对更复杂的一些需求,我们可以通过toJSON()对某些对象进行自定义序列化的需求。

    let person = {
        name: "KenTsang",
        age: 27,
        job: 'Developer',
        toJSON: function() {
            return {
                "name": "KT",
                "age": "2*",
                "job": "DP"
            }
        }
    };
    
    let result = JSON.stringify(person);
    
    // 输出结果
    // {"name":"KT","age":"2*","job":"DP"}
    

    TIPS: 序列化顺序

    1. 如果存着toJSON方法而且能通过它取得有效的值,则调用该方法。否则,返回对象本身。
    2. 如果提供了第二个参数,应用这个函数过滤器。传入函数过滤器的值是第(1)步的值。
    3. 对第(2)步返回的每个值进行相应的序列化。
    4. 如果提供了第三个参数,执行相应的格式化。

    -- 摘自《JavaScript高级程序设计》--

    parse()

    parse用于把JSON字符串解析成JavaScript对象

    JSON.parse(text: string, reviver: function(key, value) {})
    

    该方法接受三个参数

    1. 参数:接收传入的json字符串
    2. 参数:还原函数

    还原函数

    1. 返回undefined, 结果中删除相应的键
    2. 返回其它值,则将值插入到结果中
    let Person = {
        name: "KenTsang",
        age: 27,
        job: "Developer",
        birth: new Date(1991, 3, 19)
    };
    
    var jsonStr = JSON.stringify(Person);
    var jsObj = JSON.parse(jsonStr, function(key, value) {
        if (key == 'birth') {
            return new Date(value);
        } else {
            return value);
        }
    });
    
    jsObj.birth.getFullYearh(); 
    
    // 输出结果: 1991
    

    例子中通过还原函数,重新实例一个Date对象,所以可以用到getFullYear()方法。


    参考文档

    作者:以乐之名
    本文原创,有不当的地方欢迎指出。转载请指明出处。

  • 相关阅读:
    selenium 笔记 webdriver 2
    selenium 笔记 webdriver
    selenium 笔记 简介
    http 笔记 日志跟踪
    http 笔记 web主机托管
    http 笔记 国际化
    http 学习 安全Http
    Http 笔记 摘要认证
    http 笔记 基本认证机制
    算法基础
  • 原文地址:https://www.cnblogs.com/kenz520/p/10053281.html
Copyright © 2011-2022 走看看