WithCoderWithCoderWithCoder

Javascript对象序列化

    在Javascript中,对象是可以序列化的。

    对象的序列化(serialization)是指将对象的状态转换为字符串,也可以将字符串还原为对象。在ECMAScript 5中提供了内置的函数JSON.stringify()和JSON.parse()用来序列化对象和还原Javascript对象。

    上述方法都使用JSON作为数据交换格式,JSON的全称是“Javascript Object Notation”----Javascript对象表示法,它的语法和Javascript对象与数组直接量的语法非常相近:   

    <script>
        // 定义一个对象
        var o = {
            name: "neil",
            info: {
                age: 100,
                fav: ['apple''banana']
            }
        };

        var str = JSON.stringify(o); // 对象序列化
        console.log(str); // 输出字符串:{"name":"neil","info":{"age":100,"fav":["apple","banana"]}}

        var p = JSON.parse(str); // 还原对象
        console.log(p); // 输出对象,p是o的深拷贝
    </script>

    JSON的语法是Javascript语法的子集,它并不能表示Javascript里的所有值。支持对象、数组、字符串、无穷大数字、true,false和null,并且它们可以序列化和还原。NaN、Infinity和-Infinity序列化的结果是null,日期对象序列化的结果是ISO格式的日期字符串(参照Date.toJSON()函数),但JSON.parse()方法依然保留它们的字符串形态,而不会将它们还原为原始日期对象。函数、RegExp、Error对象和undefined值不能序列化和还原。JSON.stringify()函数只能序列化对象可枚举的自有属性。对于一个不能序列化的属性来说,在序列化后的输出字符串中会将这个属性省略掉。JSON.stringify()和JSON.parse()都可以接受第二个可选参数,通过传入需要序列化或还原的属性列表来定制自定义的序列化或还原操作。

欢迎分享交流,转载请注明出处:WithCoder » Javascript对象序列化