首页 技术 正文
技术 2022年11月19日
0 收藏 630 点赞 2,356 浏览 1724 个字
最近在敲代码时,遇上了一个关于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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,071
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,549
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,397
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,174
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,809
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,889