JS面向对象--2 对象和JSON的区别
2017-11-28 本文已影响0人
FF_C
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