zoukankan      html  css  js  c++  java
  • js判断对象为空 JSON.stringify(obj)

    JSON.stringify(obj) : 用于从一个对象解析出字符串

    var c = {};
    if(JSON.stringify(obj) == "{}"){ 
        console.log(7);
    }
    var a = {a:1,b:2}
    JSON.stringify(a)
    
    结果:
    "{"a":1,"b":2}"

    JSON.parse(str) : 用于从一个字符串中解析出json对象

    var str = '{"name":"huangxiaojian","age":"23"}'
    JSON.parse(str)
    
    结果:
    Object:
    age: "23"
    name: "huangxiaojian"
    __proto__: Object

    JSON.stringify(obj) 详解:

    1.语法

    JSON.stringify(value[, replacer [, space]])

    2.参数

    value:是必须要的字段。就是你输入的对象,比如数组啊,类啊等等。

    var student = new Object(); 
    student.name = "Lanny"; 
    student.age = "25"; 
    student.location = "China"; 
    var json = JSON.stringify(student); 
    console.log(json);
    
    => '{"name":"Lanny","age":"25","location":"China"}'

    replacer:这个是可选的。它又分为2种方式,一种是方法,第二种是数组。
    1.如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;

    var students = new Array() ; 
    students[0] = "Lanny"; 
    students[1] = "dong"; 
    students[2] = "I love you"; 
    var json = JSON.stringify(students,switchUpper); 
    function switchUpper(key, value) { 
        return value.toString().toUpperCase(); 
    } 
    console.log(json)
    
    => "LANNY,DONG,I LOVE YOU"

    2.如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;

    1. 如果第一个参数是数组,第二个参数也是数组的话,只显示第一个参数的值
      var students = ["Lanny","dong","I love you"]; 
      var stu = ["1","2"]; 
      var json = JSON.stringify(students,stu); 
      console.log(json);
      => '["Lanny","dong","I love you"]'
      第二个被忽略了,只是第一个被系列化了。
    2. 如果第一个是对象,第二个是数组的。
      那么如果第二个的value在第一个存在,那么的话就以第二个的值做key,第一个值为value进行表示
      var student = new Object(); 
      student.qq = "5485891512"; 
      student.name = "Lanny"; 
      student.age = 25; 
       
      var stu = new Array(); 
      stu[0] = "qq"; 
      stu[1] = "age"; 
      stu[2] = "Hi";//这个student对象里不存在。 
       
      var json = JSON.stringify(student,stu); 
      console.log(json);
      
      => '{"qq":"5485891512","age":25}'

    3.如果该参数为null或者未提供,则对象所有的属性都会被序列化;
    space:指定缩进用的空白字符串,用于美化输出(pretty-print),很好理解,用什么来做分隔符的。
    1.如果省略的话,那么显示出来的值 就没有分隔符。直接输出来
    2.如果是一个数字的话,那么它就定义缩进几个空格符,当然如果大于10 ,则最大值为10.
    3.如果是一些转义字符,比如“ ”,表示回车,那么它每行一个回车。
    4.如果仅仅是字符串,OK,就在每行输出值的时候把这些字符串附加上去就OK。当然,最大长度也是10个字符。

    var student = new Object(); 
    student.qq = "5485891512"; 
    student.name = "Lanny"; 
    student.age = 25; 
     
    var stu = new Array(); 
    stu[0] = "qq"; 
    stu[1] = "age"; 
    stu[2] = "Hi"; 
     
    var json = JSON.stringify(student,stu,"HaiKou");//注意这里的100 
    console.log(json);
    
    =>'{HaiKou"qq": "5485891512",HaiKou"age": 25}'

    关于序列化,有下面五点注意事项:

    1. 非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。
    2. 布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
    3. undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成null(出现在数组中时)。
    4. 所有以symbol为属性键的属性都会被完全忽略掉,即便replacer参数中强制指定包含了它们。
    5. 不可枚举的属性会被忽略
  • 相关阅读:
    CTSC2018滚粗记
    HNOI2018游记
    NOIWC 2018游记
    PKUWC2018滚粗记
    HNOI2017 游记
    NOIP2017题解
    [HNOI2017]抛硬币
    [HNOI2017]大佬
    NOIP难题汇总
    [NOI2013]树的计数
  • 原文地址:https://www.cnblogs.com/topyang/p/7194959.html
Copyright © 2011-2022 走看看