这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
json 串属于 javascript 的一个对象,有键和值对应的对象。这篇文章主要介绍了 JavaScript 遍历 Json 串浏览器输出的结果不统一问题的相关资料, 需要的朋友可以参考下
没有介绍正文之前先给大家说下 json 是什么。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,我们称之为 JavaScript 对象表示法。使用 JSON 进行数据传输的优势之一是 JSON 实际上就是 JavaScript。它基于 ECMAScript 第 3 版中 JavaScript 对象字面量语法子集的一种文本格式。这表示可以使用 responseText 从服务器中检索 JSON 数据,然后再使用 JavaScript 的 eval() 方法将 JSON 字符串转换成 JavaScript 对象,那么,使用附加 JavaScript 就可以很地从该对象中提取数据,而不需要处理 DOM。
我们在做项目的时候经常会用到 javascript 的 json。
首先说一下 javascript 的 json 串是什么,json 串属于 javascript 的一个对象,有键和值对应的对象。
一般的格式是:
- a = {
- a1: 1,
- a2: 'abc',
- a3: 'abc',
- a4: [1, 2, 3],
- a5: function() {
- console.log(12)
- }
- };
我们读取这个 json 的方法是通过 for in 循环来遍历;
使用 json 串的好处是可以事先把数据库中的数据一次性的读取出来存成 json 的形式,然后通过 javascript 来读取里边的属于,这样可以大大减少对服务器的请求次数,增加了前台页面的加载效率 。
我们在遍历 json 的时候会遇到许多问题,我今天遇到的问题是在我们把 json 串的键值写成数字的情况下,在主流浏览器遍历的时候不会按照我们输出的 json 的结构先后输出,而是按照数字的从小到大顺序输出。但是 ie8 以下浏览器会按照我们输出的顺序输出。
例如:
- a = {
- '1': 1,
- '5': function() {
- console.log(12)
- },
- '2': 'abc',
- '4': [1, 2, 3],
- '3': {
- '5': 'abc',
- '6': 'bcd'
- },
- };
通过 for in 循环
- for(var i in a){
- console.log(a[i]);
- }
chrome,firefox 等浏览器输出:1,abc,Object {5="abc", 6="bcd"},[1, 2, 3],function();
ie8 以及以下浏览器:1,function(),abc,[1, 2, 3],Object {5="abc", 6="bcd"};
解决这样的问题有两种:
第一:就是把数字的键值改成字符串形式的包括字母或者下划线;
第二 :就是解决 ie 的兼容性,通过先遍历 json 然后把键值存入一个数组中,然后再通过数组排序来循环数组取 json 中的数据。
具体代码:
- var arr = [],
- sortNumber = function(a, b) {
- return a - b;
- };
- for (var i in a) {
- arr[arr.length] = a[i];
- arr.sort(sortNumber);
- for (var x = 0; x < arr.length; x++) {
- console.log(a[arr[x]]);
- }
浏览器读取的数据就会保持一致了,有个缺点就是这个也不会按照我们输出的 json 格式输出,只是解决了浏览器的兼容问题。
以上所述是小编给大家介绍的 JavaScript 遍历 Json 串浏览器输出的结果不统一问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 phperz 网站的支持!
来源: http://www.phperz.com/article/17/0513/330683.html