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

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的区别)