JS对象序列化、对象的toString()与对象的valueOf()

序列化

JSON.stringify()处置惩罚对象

let obj = {
            val: undefined,
            a: NaN,
            b: Infinity,
            c: new Date(),
            d: { e: 'nice' },
            y: Object
          }
console.log(JSON.stringify(obj)) 
//输出 "{ "a": null, "b": null, "c": "2019-03-13T12:01:44.295Z", "d": "{ "e": "nice" }" }"          

当对象的valueundefinedObject时会被疏忽,为NaN和Infinity为null,对象实比方d,为keyvalue都加上双引号

JSON.stringify()处置惩罚数组

let arr = [undefined, Object, Symbol(""), { e: 'nice' }]
console.log(JSON.stringify(arr)) 
//输出 "[null, null, null, { "e": "nice" }]"

当成员为undefinedObjectSymbol时为null,对象也是为keyvalue都加上双引号

自定义序列化

能够重写toJSON()要领举行自定义序列化

let obj = {
            x: 1,
            y: 2,
            re: {
                  re1: 1,
                  re2: 2,
                  toJSON: function(){
                      return this.re1 + this.re2;
                  }  
                }
          }
console.log(JSON.stringify(obj))
//输出 "{ "x":1, "y":2, "re":3 }"          

对象的toSting()和valueOf()

let obj = { x:1, y:2 }
console.log(obj.toString()) //输出 "[object Object]" 

obj.toString = function(){
                    return this.x + this.y;
               }
"Result" + obj; //输出 "Result3" 挪用了toString
+obj; //输出 "3" 挪用了toString

obj.valueOf = function(){
                    return this.x + this.y + 100;
               }
"Result" + obj; //输出 "Result103" 挪用了toString               

toStringvalueOf都存在时,在举行操纵时,都邑尝试转换成基础范例,先找valueOf,假如返回基础范例,这只挪用valueOf,假如不是,比如是对象的话,就去找toString,假如也返回Object,就会报错

    原文作者:战五渣
    原文地址: https://segmentfault.com/a/1190000018494095
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞