js的对象竟等于关联数组?

前言

今天瞅json转换的时候感觉很奇怪,为什么json格式的数据可以被eval?
(eval应该是拿来执行js代码的,也就是说,json本身就是js代码?)
于是进行了下面的一些小测试

测试

1.json格式可以直接创建为对象?

今天瞅json转换的时候,发现php关联数组

转成的json是一个类似这样的形式

{"id":"0","title":"title0","subtitle":"subtitle0","isChecked":"0"}

我在这篇文章里提到过{}=new Object(),上面的代码也是被{}罩住的
而json可以使用eval转为一个js关联数组对象,代表着上面的这段代码应该是可以直接被执行的
那么问题来了,上方的这种写法和对象的标准形式

let a = {id:"0",title:"title0", subtitle:"subtitle0", isChecked:"0"}

有啥区别?

实验:

let a = {"id":"0","title":"title0","subtitle":"subtitle0","isChecked":"0"};
alert(a.title); //成功弹窗title0

也就是说,没有区别
那么新的问题出现了,eval的返回值是一个关联数组对象,关联数组的标准访问形式是a["title"]
嗯?a["title"]=a.title

2.关联数组和类是一个东西?

这次我们以纯正的关联数组定义形式创建关联数组
实验:

let a = {};
a["b"] = "c";
alert(a.b); //弹出c

更进一步

let a = {};
a.b = function () {alert("c")}
a["b"](); //同样弹出c

它们真的就是一个东西。。。
要说区别,还是有的,比如以数字开头的东西可以作为关联数组的键值,但是不能以类的形式赋值/访问(这和变量名的要求有关)

3.关联数组和Array有啥关系?

实验:

let a = new Array();
a["b"] = "c";
alert(a.length); //显示0

所以,关联数组和Array没有关系,创建关联数组完全没有必要创建一个Array
对于Array对象来说,以关联数组的形式赋值相当于直接给Array对象增加属性

总结

  • 关联数组等于对象
  • 关联数组形式赋值相当于直接给对象加属性
  • json格式数据确实是可以直接被执行并获得对象的
  • js不愧是script
免责声明:
1.本站所有内容由本站原创、网络转载、消息撰写、网友投稿等几部分组成。
2.本站原创文字内容若未经特别声明,则遵循协议CC3.0共享协议,转载请务必注明原文链接。
3.本站部分来源于网络转载的文章信息是出于传递更多信息之目的,不意味着赞同其观点。
4.本站所有源码与软件均为原作者提供,仅供学习和研究使用。
5.如您对本网站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。
火焰兔 » js的对象竟等于关联数组?