Home > Web Front-end > JS Tutorial > body text

JavaScript traverses the Json string and the browser outputs inconsistent results

高洛峰
Release: 2016-12-07 17:19:50
Original
1179 people have browsed it

Before introducing the main text, let me tell you what json is.

JSON (JavaScript Object Notation) is a lightweight data exchange format, which we call JavaScript Object Notation. One of the advantages of using JSON for data transfer is that JSON is actually JavaScript. It is a text format based on the JavaScript object literal syntax subset of ECMAScript version 3. This means that you can use responseText to retrieve JSON data from the server, and then use JavaScript's eval() method to convert the JSON string into a JavaScript object. Then, using additional JavaScript, you can easily extract the data from the object without processing. DOM.

We often use javascript json when working on projects.

First of all, let’s talk about what the json string of javascript is. The json string belongs to an object of javascript and has objects corresponding to keys and values.

The general format is:

a = {
a1 : 1,
a2 : 'abc',
a3 : 'abc',
a4 : [1,2,3],
a5 : function(){console.log(12)}
};
Copy after login

The way we read this json is to traverse it through a for in loop;

The advantage of using a json string is that the data in the database can be read out in one go Save it in the form of json, and then read the content inside through javascript. This can greatly reduce the number of requests to the server and increase the loading efficiency of the front-end page.

We will encounter many problems when traversing json. The problem I encountered today is that when we write the key value of the json string as a number, the mainstream browser will not follow the json we output when traversing. The structures are output sequentially, but in order of numbers from small to large. But browsers below IE8 will output in the order we output.

For example:

a = {
'1' : 1,
'5' : function(){console.log(12)},
'2' : 'abc',
'4' : [1,2,3],
'3' : {'5' : 'abc', '6' : 'bcd'},
};
Copy after login

Through for in loop

for(var i in a){
console.log(a[i]);
}
Copy after login

Chrome, firefox and other browser output: 1, abc, Object { 5="abc", 6="bcd"}, [ 1, 2, 3], function();

ie8 and the following browsers: 1, function(), abc, [1, 2, 3], Object { 5="abc", 6="bcd"};

There are two ways to solve this problem:

The first is to change the key value of the number into a string including letters or underscores;

The second is to solve the compatibility of IE, by first traversing json and then The key values ​​are stored in an array, and then the array is sorted to loop through the array to retrieve the data in json.

Specific code:

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]]);
}
Copy after login

The data read by the browser will be consistent. One disadvantage is that this will not be output in the json format we output, which only solves the browser compatibility issue.


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template