最近在敲代码时,遇上了一个关于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. 投票系统 & js脚本简单刷票

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. JQuery获取Dom元素的方法

    (function (window) { var arr = []; var VP = function (selector, context) { return new VP.fn.init(sel ...

  3. 关于 Eclipse中的Web项目 部署的文件位置 查看jsp源码的部署位置

    使用 eclipse 开发web项目 会默认 部署在 工作目录下: .metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 在这里 ...

  4. css 定位属性position的使用方法实例-----一个层叠窗口

    运行结果: <!DOCTYPE html> <html> <head> <title>重叠样式窗口</title> <style ty ...

  5. select2 4.0.3 空记录时的处理

    使用select2插件,如果后台查找没有记录,不能返回null,要返回一个空数组,不然会报错:data is null 空数组形式为(firefox调试输出):{"items":[ ...

  6. java 图片质量压缩

    /** * 图片质量压缩 * @param file 要压缩的图片文件 * @param input 文件输入流 * @param quality 压缩质量(0-1) * @author ouyang ...

  7. docker~windows版本的安装与使用

    回到目录 在面向服务的框架里,docker扮演着十分重要的角色,他使你的部署更轻量,使运维更智能化,事实上微软自己的项目也已经用上了docker了,下面介绍一下在windows环境上使用docker的 ...

  8. 谈一款MOBA游戏《码神联盟》的服务端架构设计与实现

    一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是一位英雄.客户端和服务端均使用C#开发,客户端使用Unity3D引擎,数据库使用MySQL.这个MOBA类游戏是笔者 ...

  9. mybaits错误解决:There is no getter for property named 'parentId ' in class 'java.lang.String'

    在使用mybaitis传参数的时候,如果仅传入一个类型为String的参数,那么在 xml文件中应该使用_parameter来代替参数名. 比如mapper中如下方法,只有一个String值 publ ...

  10. Spring事件解析

    首先介绍Spring事件相关类的关系: 其中EventListener与EventObject均是Java SE的范畴,源码如下: package java.util; public interfac ...