最近在敲代码时,遇上了一个关于JS数组的问题,由此引发了关于对象和json的联想,曾经觉得很畅顺的知识点突然模糊了。于是,为了理清这些东西,有了如下这篇文章。觉得没问题的猿们可以当复习,而那些带着疑问的童鞋可以细细看。当然,有任何问题欢迎指出。
理清这些问题,第一步当然是找到他们的概念:
js所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript允许自定义对象

(1)js数组,常态为var a = [1,2,3]的格式,用文字来形容就是一个有序数列。因为是有序的,所以里面的东西是按序排放

(2)自定义js对象,这里我构造一个和json相似的对象来找到区别,这里写了两种构造方法

2.1 var person = {key:“value”}
2.2var person = new object();
person.key=“value” ;

(3)json:一种存储和交换信息的格式,常态为var json = {“key”:“value”}的格式,这里和js对象不同的是key多了“”

区别与联系: 
一、json对象与json字符串的联系: 
1. json对象

var json = {
“key1”:“value1”,
“key2”:“value2”,
};

json为 {“key1”:“value1”,“key2”:“value2”}

2.json字符串

var a1 = “{“;
var a2 = “‘key1’:’value1’,”;
var a3 = “‘key2’:’value2’}”;
var a = a1 + a2 + a3;

a为 ‘{“key1”:“value1”,“key2”:“value2”,}’ //比上面在外面多了引号,因为是字符串

所谓的json字符串,其实是一种json格式的字符串, 
而json对象则是一种json格式的键值对对象(有对象的属性和方法), 
所以json字符串不同于json对象,但是他们可以相互转化: 
eval(json字符串) ==》 转化成json对象 
JSON.stringify(json对象) ==》转化为json字符串

二、js对象与json对象 
js对象,var person = {key:“value”} 
json对象,var json = {“key”:“value”} 
在json规范里面描述里,json键值对为string:value形式,所以这里的key是字符串,要加双引号 
记得上面概念里,js所有事物都是对象,那么我们完全可以把json对象当做js对象的子集,string只是js对象的key的数据类型中的一个选项 
额外说一点,js里面是没有键值对数组这一说的,现有的这种键值对数组(也即是关联数组)其实就是js对象,需要的要自己去构造,如:

var a = [];
a.push({
value:value
});

当然,现在的ES6已经有了专门表示键值对数组的结构,即map

json格式常用于数据传输方面,其他情况遇到类似json对象的形式,可以把它当成是特殊的js对象来处理,例子如下

var a = {
“star”:{“img”:require(./image/XXX.png),”name”:”picture1”},
“earth”:{“img”:require(./image/YYY.png),”name”:”picture2”}
};

所以 a[star].name 以及 a[star][name] 指的都是picture1

三、json对象乱入数组

var a = [
{“img”:”require(./image/XXX.png)”,”name”:”picture1”},
{“img”:”require(./image/YYY.png)”,”name”:”picture2”}
];

这里的问题只要记住一点,是数组就进行数组处理,是json对象就进行json对象处理, 
这段可以分解为 
var q = {“img”:…..}; 
var w = {“img”:….}; 
a[q,w]

a[1][name] 或者 a[1].name 都是picture2

另外,需要注意上述提到一点,关联数组属于js对象而不是数组,

所以虽然a[1][name]或者 a[1].name 都是可以使用类似于数组的索引,但它实质是js对象object

理清JS数组、json、js对象的区别与联系的更多相关文章

  1. prototype.js 和json.js 冲突

    1.冲突简述和分析 prototype.js与json.js并不是完全兼容的.主要冲突在于json.js为Object的原型增加了一个toJSONString的方法. 冲突之一:是prototype中 ...

  2. 用json2.js 代替 json.js防止与jQuery的js冲突

    用json2.js 代替 json.js防止与jQuery的js冲突 1 s.toJSONString json.js:259 2 Object.toJSONString json.js:158 3 ...

  3. JSON用法之将PHP数组转JS数组,JS如何接收PHP数组

    先看php文件,当我们获取到$arr这个数组后 foreach ($arr as $value) { $json .= json_encode($value) . ','; } echo '[' . ...

  4. JS 的实例和对象的区别

    对于传统的OOP思想,JS的语法确实比较难搞,其中之一就是实例和对象的区别. 什么是实例? 实例是类的具体化产品. JS语法没有类这个概念(当然ES6引用了类这个概念).只能通过构造函数来创建类,例如 ...

  5. js数组遍历和对象遍历

    针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历:还有性能,优缺点等. JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9]; for ( ...

  6. 将php数组转js数组,js如何接收PHP数组,json的用法

    首先下载下面这个文件(这是一段是别人写出来专门解析json的代码),然后引入这个文件! http://pan.baidu.com/s/1dD8qVr7 现在当我们需要用ajax与后台进行交互时,怎样将 ...

  7. JS数组slice()和splice()的区别

    以前还是纯小白的时候,总会搞混JS数组的 slice() 和 splice() 方法.因为这2个方法名字太像了,就差一个字母,语法也有类似之处.    现在久了没用,有时候也会忘记,所以做一个总结来区 ...

  8. js遍历数组和遍历对象的区别

    <script> //----------------for用来遍历数组对象-- var i,myArr = [1,2,3]; for (var i = 0; i < myArr.l ...

  9. js中JSON和JSONP的区别,让你从懵逼到恍然大悟

    说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服 ...

  10. js数组合并以及对象的遍历

    这是很基础的知识,but,对于一只未系统学习过js,只略懂搬砖的跨界狗,还是经常犯错: 场景:移动端上拉加载更多. 初始数组合并后来请求的数组. 使用concat方法,不过要主要: 使用concat, ...

随机推荐

  1. Octopus——excel导入导出工具

    Octopus Octopus是一个简易的Excel导入导出工具.目前主要就两个功能: 导入:将excel中一行数据转换为指定的java对象,并通过指定的正则表达式检查合法性. 导出:按照给定的xml ...

  2. opencv如何实现【不用全局变量进行滚动条控制】

    opencv中自带滚动条,其中一个问题是该回调函数(on_trackbar)大多使用的是全局变量,大型项目调试时弊端众多,比如下图: 为此,留意了void on_Trackbar(int par1, ...

  3. C/C++中对链表操作的理解&&实例分析

    链表概述 链表是一种常见的重要的数据结构.它是动态地进行存储分配的一种结构.它可以根据需要开辟内存单元.链表有一个“头指针”变量,以head表示,它存放一个地址.该地址指向一个元素.链表中每一个元素称 ...

  4. springmvc(三) 参数绑定、

    前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...

  5. firefox插件开发及源码下载

    在个别情况下,由于数据量巨大,造成显示性能的明显下降,此时使用c++开发firefox插件,可以提高用户使用体验. test.html: 在插件中,我们导出3个函数给js:AddStr, Pause, ...

  6. Phpcms整理

    一.先去官网下载一个pc(http://www.phpcms.cn/)进行安装 把下载的pc包放在服务器www目录下: 在地址栏访问localhost/project/install/install. ...

  7. RxSwift 系列(一) -- Observables

    为什么使用RxSwift? 我们编写的代码绝大多数都涉及对外部事件的响应.当用户点击操作时,我们需要编写一个@IBAction事件来响应.我们需要观察通知,以检测键盘何时改变位置.当网络请求响应数据时 ...

  8. mysql中csv文件的导入导出

    导出例子: select *from testinto outfile 'D:test.csv'fields terminated by ',' optionally enclosed by '&qu ...

  9. 使用Go和Let's Encrypt证书部署HTTPS

    为什么要使用HTTPS?使用HTTPS的途径有哪些?如何用Go来部署HTTPS?拿出你的小本本,你要的干货都在这儿! HTTPS的好处我们已在之前的文章中提高好多.它加密浏览器和服务器之间的流量,保障 ...

  10. (转)JAVA反射机制理解

    JAVA反射机制: 通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们. 理论的东东太多也没 ...