理清JS数组、json、js对象的区别与联系
最近在敲代码时,遇上了一个关于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对象的区别与联系的更多相关文章
- prototype.js 和json.js 冲突
1.冲突简述和分析 prototype.js与json.js并不是完全兼容的.主要冲突在于json.js为Object的原型增加了一个toJSONString的方法. 冲突之一:是prototype中 ...
- 用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 ...
- JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
先看php文件,当我们获取到$arr这个数组后 foreach ($arr as $value) { $json .= json_encode($value) . ','; } echo '[' . ...
- JS 的实例和对象的区别
对于传统的OOP思想,JS的语法确实比较难搞,其中之一就是实例和对象的区别. 什么是实例? 实例是类的具体化产品. JS语法没有类这个概念(当然ES6引用了类这个概念).只能通过构造函数来创建类,例如 ...
- js数组遍历和对象遍历
针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历:还有性能,优缺点等. JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9]; for ( ...
- 将php数组转js数组,js如何接收PHP数组,json的用法
首先下载下面这个文件(这是一段是别人写出来专门解析json的代码),然后引入这个文件! http://pan.baidu.com/s/1dD8qVr7 现在当我们需要用ajax与后台进行交互时,怎样将 ...
- JS数组slice()和splice()的区别
以前还是纯小白的时候,总会搞混JS数组的 slice() 和 splice() 方法.因为这2个方法名字太像了,就差一个字母,语法也有类似之处. 现在久了没用,有时候也会忘记,所以做一个总结来区 ...
- js遍历数组和遍历对象的区别
<script> //----------------for用来遍历数组对象-- var i,myArr = [1,2,3]; for (var i = 0; i < myArr.l ...
- js中JSON和JSONP的区别,让你从懵逼到恍然大悟
说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服 ...
- js数组合并以及对象的遍历
这是很基础的知识,but,对于一只未系统学习过js,只略懂搬砖的跨界狗,还是经常犯错: 场景:移动端上拉加载更多. 初始数组合并后来请求的数组. 使用concat方法,不过要主要: 使用concat, ...
随机推荐
- golang路上的小学生系列--使用reflect查找package路径
本文同时发布在个人博客chinazt.cc 和 gitbook 今日看到了一个有趣的golang项目--kolpa(https://github.com/malisit/kolpa). 这个项目可以用 ...
- Linux下进行硬盘挂载、分区、删除分区,格式化,卸载方法
本文简单介绍了下文件系统及其操作(df命令),磁盘分区.格式化,还有最主要是挂载操作. 在这里对"挂载"做个说明,我们都知道文件系统是创建在磁盘上面的,每个文件系统都有独立的ino ...
- usaco training 4.2.2 The Perfect Stall 最佳牛栏 题解
The Perfect Stall题解 Hal Burch Farmer John completed his new barn just last week, complete with all t ...
- Python之编写登陆接口
1.输入用户名密码: 2.认证成功后显示欢迎信息: 3.错误三次后,账号被锁定. 账号文件:user.txt 锁定文件:locked.txt 流程图如下: # -*- coding:utf-8 -*- ...
- oracle预定义角色
角色是相关权限的集合,使用角色能够简化权限的管理.简而言之就是oracle可以事先把一系列权限集中在一起(角色),打包赋予给用户,那么用户就具有了角色的一系列权限. oracle预定义角色有25种,它 ...
- SSH框架 spring 配置中的: scope="prototype"
"可以利用容器的scope="prototype"来保证每一个请求有一个单独的Action来处理, 避免struts中Action的线程安全问题." 这句话怎么 ...
- 计算BMI
用一个小程序计算BMI 代码如下: package Day06; public class BMI { private String name; private int age; private do ...
- Missing number - 寻找缺失的那个数字
需求:给出一个int型数组,包含不重复的数字0, 1, 2, ..., n:找出缺失的数字: 如果输入是[0, 1, 2] 返回 3 输入数组 nums = [0, 1, 2, 4] :应该返回 3 ...
- FreeRTOS——错误排查
1. printf-stdarg.c 在调用标准库函数时,栈空间的用量可能急剧上升,特别是IO与字符串处理函数,比如 sprintf(). 在FreeRTOS下载包中有一个名为printf-stdar ...
- nopCommerce 3.9 大波浪系列 之 路由扩展 [多语言Seo的实现]
一.nop种的路由注册 在Global.asax,Application_Start()方法中会进行路由注册,代码如下. public static void RegisterRoutes(Route ...