资讯专栏INFORMATION COLUMN

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

iamyoung001 / 1965人阅读

摘要:序列化处理对象输出当对象的为和时会被忽略,为和为对象实例如,为和都加上双引号处理数组输出当成员为时为对象也是为和都加上双引号自定义序列化可以重写方法进行自定义序列化输出对象的和输出输出调用了输出调用了输出调用了当和都存在时,在进行操作时

序列化 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://www.ucloud.cn/yun/109187.html

相关文章

  • 通过一张简单图,让你彻底地、永久地搞懂JS==运算

    摘要:一有和无在图中,值的六种类型用蓝底色的矩形表示。想一下在语言中,根本没有布尔类型,通常用来表示逻辑真假的正是整数和。根据图,需要将布尔类型转为数字类型,而转为数字的结果是,所以表达式变为两个操作数变成了对象类型数字类型。 大家知道,==是JavaScript中比较复杂的一个运算符。它的运算规则奇怪,容易让人犯错,从而成为JavaScript中最糟糕的特性之一。 在仔细阅读了ECMASc...

    testbird 评论0 收藏0
  • js数据类型转化

    数据类型转化表 首先上数据类型转化表,便于遇到问题直接查看 值 字符串 数字 布尔值 对象 undefined null undefined null NaN false false throws TypeError throws TypeError true false true false 1 0 new Boolean(true) new Boolean(f...

    dmlllll 评论0 收藏0
  • 每天10个前端知识点:杂技

    摘要:个人博客已上线,欢迎前去访问评论无媛无故的个人博客以下内容若有问题烦请即时告知我予以修改,以免误导更多人。把一个逻辑值转换为字符串,并返回结果。注册后,可直接调用的接口,并获取的返回值。 个人博客已上线,欢迎前去访问评论!无媛无故 - wangchloe的个人博客 以下内容若有问题烦请即时告知我予以修改,以免误导更多人。 toString() && valueOf() JSON ...

    dongfangyiyu 评论0 收藏0
  • 每天10个前端知识点:杂技

    摘要:个人博客已上线,欢迎前去访问评论无媛无故的个人博客以下内容若有问题烦请即时告知我予以修改,以免误导更多人。把一个逻辑值转换为字符串,并返回结果。注册后,可直接调用的接口,并获取的返回值。 个人博客已上线,欢迎前去访问评论!无媛无故 - wangchloe的个人博客 以下内容若有问题烦请即时告知我予以修改,以免误导更多人。 toString() && valueOf() JSON ...

    marser 评论0 收藏0

发表评论

0条评论

iamyoung001

|高级讲师

TA的文章

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