美文网首页JavaScript渣渣到大神手册
JS面向对象--2 对象和JSON的区别

JS面向对象--2 对象和JSON的区别

作者: FF_C | 来源:发表于2017-11-28 17:49 被阅读0次

    JSON就是javascript object notation,JS对象表示法,是JS对象的严格子集
    区别就是引号:JSON要求所有的键必须加双引号,而JS对象实际上不要求双引号

    这就是一个标准JSON

     var obj ={
      "name":"小明",
      "age":"12",
      "sex":"男",
      "married":false
     } 
     alert(obj.age)
    

    实际上不加引号也是合法的:

    var obj={
      name:"小明",
      age:12,
      sex:"男",
      married:false
    }
    alert(obj.name)
    

    为什么 JSON规定要加上引号呢?这是因为JSON是一个数据交换格式,它是HTML和PHP等等后台语言的交换媒介,PHP工程师可以从数据库中得到数据,组建JSON,前台通过AJAX拿到这个JSON后解析JSON 组建页面.

    所以是其他语言要求JSON有引号,否则其它语言中会报错,不是JS要求的。JSON天生为通信而生
    但是,有一种键必须加引号。就是不符合标识符命名规范的键,必须加引号,否则报错。

    // 如果命名是符合标识符的命名规范的,不需要加引号

     var obj ={
      $ : 12,
      _ : 13,
      _$0_0$_ : 14
     }
     alert(obj.$);
     alert(obj._);
    

    // 比如下面的键名都不符合标识符的命名规范 所以要加双引号

    var obj = {
      "-": 12,    
      "@@@":13,
      "2016" :14,
      "2017" :15   
    };
    alert(obj["2017"]) ; //加引号后没人报错 
    //alert(obj.2017)     //点写法不行
    

    访问该属性的时候,必须加上引号,用方括号表示法
    obj["attr"]

    特别的,如果我们用一个变量存储一个key,此时必须用方括号枚举,并且不能有引号:

    var obj = {
      "-": 12,    
      "@@@":13,
      "2016" :14,
      "key" :888
    };
    var key =2014 +1 +1;
    alert(obj[key]);    //实际读取的是obj["2016"]就是14
    alert(obj["key"]);    //888
    alert(obj.key);    //888
    
    

    相关文章

      网友评论

        本文标题:JS面向对象--2 对象和JSON的区别

        本文链接:https://www.haomeiwen.com/subject/gseebxtx.html