JavaScript does not support multidimensional arrays, but because arrays can contain objects (arrays are also objects), arrays can be nested to implement functions similar to multidimensional arrays.
1. Understanding Arrays
An array is a collection of data of a type that can be integral, string, or even an object
JavaScript does not support multidimensional arrays, but because arrays can contain objects (arrays are also objects), arrays can be nested to implement functions similar to multidimensional arrays
1.1 Defining arrays
Declares an array of 10 elements
var a = new Array (10);
At this time for a has opened up the memory space, contains 10 elements, with the array name plus [subscript] to invoke, such as a[2] but at this time the element is not initialized, the call will return undefined
The following code defines a variable array and assigns it
var a = new Array ();
A[0] = 10;
A[1] = "AAA";
A[2] = 12.6;
As mentioned above, the array can put objects, such as the following code
var a = new Array ();
A[0] = true;
A[1] = document.getElementById ("text");
A[2] = {x:11, y:22};
A[3] = new Array ();
Arrays can be instantiated directly by assigning values, such as
var a = new Array (1, 2, 3, 4, 5);
var B = [1, 2, 3, 4, 5];
A and B are all arrays, except that B uses an implicit declaration to create another instance, and if alert (a==b) pops up false
1.2 Multi-dimensional arrays
In fact, JavaScript is not supported multidimensional arrays, in the ASP can use Dim a (10,3) to define multidimensional array, in JavaScript, if the var a = new Array (10,3) will be the error
But as I said before, an array can contain objects, so you can declare an element in an array again as a group, such as
var a = new Array ();
A[0] = new Array ();
A[0][0] = 1;
Alert (a[0][0]); Pop up 1
Assignment when declaring a value
var a = new Array ([1,2,3], [4,5,6], [7,8,9]);
var b = [[1,2,3], [4,5,6], [7,8,9]];
As a result, a is a regular instantiation, B is an implicit declaration, and the result is to generate a multidimensional array
1.3 Array Literals
I don't know how to call it in Chinese, what's the word array?
Speaking of arrays, we have to say array literals, arrays are actually special objects, objects have unique properties and methods, through the object name. Property, Object. Method () to take values and calls, while arrays are evaluated by subscript, array literals is similar to array, is a collection of data types, but array literals is essentially an object, declaration, and invocation, which is different from an array.
var aa = new Object ();
aa.x = "Cat";
AA.Y = "Sunny";
alert (aa.x); Eject Cat
Create a Simple object, the general call is through the aa.x, and if as an array literals, with alert (aa["x"]) will pop the cat
var a = {x: "Cat", Y: "Sunny"};
Alert (a["Y"]); Pop-up Sunny
This is another way to create an object, and the result is the same
2. Operation of array elements
As has been said above, you can read and write elements by array [subscript]
The scope of the subscript is 0– (23 (superscript 2)-1), when the subscript is negative, floating-point, or even Boolean, the array is automatically converted to the object type, for example
var B = new Array ();
b[2.2] = "XXXXX";
Alert (b[2.2]); -> XXXXX
At this time the equivalent of b["2.2"] = "XXXXX"
2.1 Loop of an array
var a = [1,2,3,4,5,6];
for (var i =0; i<a.length; i++) {
Alert (A[i]);
}
This is the most commonly used, calendar array, and the code will pop 1 to 6 in turn.
There is also a common
var a = [1,2,3,4,5,6];
for (Var e in a) {
Alert (e);
}
or pop-up 1 to 6,for...in is a calendar object (an array is a special object) object, used on an array, because the array has no property name, so the direct output value, this structure statement is used on the object, such as the following
var a = {X:1,y:2,z:3};
for (Var e in a) {
Alert (E + ":" + a[e]);
}
At this point e takes the attribute name, that is x, Y, X, and to get the value, the array name [property] is used, so a[e] equals a["x", a["Y"], a["Z"]
2.2 Common functions for arrays
Concat
Append the array after the existing array and return the new array without affecting the existing array
var a = [123];
var b = "Sunnycat";
var c = ["www", "ido"];
var d = {x:3.14, y: "SK"};
var e = [1,2,3,4,[5,6,[7,8]]];
Alert (A.concat (b)); -> 123,sunnycat
alert (a); -> 123
Alert (B.concat (c, D)); -> Sunnycatwww,21,ido[object Object]
Alert (C.concat (b)); -> Www,21,ido,sunnycat
Alert (E.concat (11,22,33). Join ("#")); -> 1 # 2 # 3 # 4 # 5,6,7,8 # 11 # 22 # 33
Note that you can only use an array or a string if you are connected (the preceding a) is a numeric value, Boolean value, the object, it will be the error, string connection array, string will be concatenated with the first element of the array to the new elements, and the array connection string will append new elements (this I do not know the cause of this, people who know, please disclose), For an array containing an array, an object, the connection remains intact.
Join
Connect the array to a string by using the specified spacer character
var a = [' A ', ' B ', ' C ', ' d ', ' e ', ' f ', ' G '];
Lert (A.join (",")); -> a,b,c,d,e,f,g equivalent to a.tostring ()
Alert (A.join ("X")); -> A x B x C x D x E x F x G
This is easy to understand, but it is important to note that only a one-dimensional array is converted, and if there is an array in the array, it is not followed by the string specified by the join, but rather by the default ToString (), for example
var a = [' A ', ' B ', ' C ', ' d ', ' e ', ' f ', ' G ', [11,22,33]];
Alert (A.join ("*")); -> A * b * c * d * e * f * g * 11,22,33
The array inside the array, and no use * connection
Pop
Deletes the last element of the array and returns the element
var a = ["AA", "BB", "CC"];
document.write (A.pop ()); -> cc
document.write (a); -> AA, BB
If the array is empty, returns the undefined
Push
Adds an array to the back of the array and returns the new length of the array
var a = ["AA", "BB", "CC"];
document.write (A.push ("DD")); -> 4
document.write (a); -> AA,BB,CC,DD
document.write (A.push ([1,2,3])); -> 5
document.write (a); -> aa,bb,cc,dd,1,2,3
The difference with concat is that the concat does not affect the original array, returns the new array directly, and the push modifies the original array, returning the new length of the array.
Sort
Array sort, first look at an example
var a = [11,2,3,33445,5654,654, "ASD", "B"];
Alert (A.sort ()); -> 11,2,3,33445,5654,654,asd,b
The result is not very unexpected, yes, the sort is not according to the size of the integer, but the string contrast, is to take the first character of the ANSI code contrast, small row front, the same words to take the second ratio, if you want to compare the integer value, you can
var a = [11,2,3,33445,5654,654];
A.sort (function (a,b) {
return a-b;
});
alert (a); -> 2,3,11,654,5654,33445
The sort () method has an optional parameter, which is a function in the code, which is a simple example of not being able to sort the non-numeric, not the number that needs to be judged, not much.
Reverse
The array is reversed and, sort (), the first character ASCII value is compared
var a = [11,3,5,66,4];
Alert (A.reverse ()); -> 4,66,5,3,11
If the array contains an array, it is treated as an object and does not solve the element
>var a = [' A ', ' B ', ' C ', ' d ', ' e ', ' f ', ' G ', [4,11,33]];
Alert (A.reverse ()); -> 4,11,33,g,f,e,d,c,b,a
Alert (A.join ("*")); -> 4,11,33 * g * f * e * d * c * b * a
It is supposed to be the last of 11 rows, because this is the first place to compare 4,11,33 as a complete object. If you can't see it, string it up with a join () and you'll know more
Shift
Deletes the first element of the array and returns the element, similar to pop
var a = ["AA", "BB", "CC"];
document.write (A.shift ()); -> AA
document.write (a); -> BB,CC
Returns the undefined when the array is empty
Unshift
In contrast to shift, add an element to the front of the array and return the new length of the array
var a = ["AA", "BB", "CC"];
document.write (A.unshift (11)); -> 4 Note: ie return undefined
document.write (a); -> 11,AA,BB,CC
document.write (A.unshift ([11,22])); -> 5
document.write (a); -> 11,22,11,AA,BB,CC
document.write (A.unshift ("cat")); -> 6
document.write (a); -> CAT,11,22,11,AA,BB,CC
Note that the method, in IE will return to undefined, seemingly Microsoft bug, I under Firefox can play the array of new length correctly
Slice
Returns an array fragment
var a = [' A ', ' B ', ' C ', ' d ', ' e ', ' f ', ' G '];
Alert (A.slice (1,2)); -> b
Alert (A.slice (2)); -> C,d,e,f,g
Alert (A.slice (-4)); -> D,e,f,g
Alert (A.slice ( -2,-6)); -> Empty
A.slice (1,2), starting with subscript 1, to the number of subscript 2, note that the element with subscript 2 is not included
If there is only one argument, the default to array is the last
-4 is the 4th element of the penultimate, so it returns the reciprocal four elements.
The last line, starting from the penultimate 2nd, because it is truncated later, obviously does not take the previous element, so return an empty array, and if changed to A.slice ( -6,-2) then return b,c,d,e
Splice
Deletes an element of a fragment from an array and returns the deleted element
var a = [1,2,3,4,5,6,7,8,9];
document.write (A.splice (3,2)); //-> 4,5
document.write (a); //-> 1,2,3,6,7,8,9
document.write (A.splice (4)); //-> 7,8,9 Note: ie return empty
document.write (a); //-> 1,2,3,6
document.write (A.splice (0,1)); //-> 1
document.write (a); //-> 2,3,6
document.write (A.splice (1,1,["AA", "BB", "CC"]); //-> 3
document.write (a); //-> 2,aa,bb,cc,6,7,8,9
document.write (A.splice (1,2, "ee"). Join ("#"));//-> AA,BB , Cc#6
document.write (a); //-> 2,ee,7,8,9
document.write ( A.splice (1,2, "CC", "AA", "tt"). Join ("#")); //-> ee#7
document.write (a); //-> 2,cc,aa,tt,8,9
Note that the method in IE, the second parameter is required, do not fill the default is 0, such as A.splice (4), in IE returned empty, the effect is equivalent to A.splice (4,0)
Tostring
Convert an array to a string, not just an array, all objects can use this method
var a = [5,6,7,8,9,["A", "BB"],100];
document.write (A.tostring ()); -> 5,6,7,8,9,a,bb,100
var B = new Date ()
document.write (B.tostring ()); -> Sat Aug 8 17:08:32 utc+0800 2009
var c = function (s) {
alert (s);
}
document.write (C.tostring ()); -> function (s) {alert (s);}
Boolean value returns True or FALSE, and the object returns [object objectname]
Join () replaces only one-dimensional arrays, compared to the join () method, and ToString () completely flatten the entire array, whether one-dimensional or multidimensional.
At the same time, this method can be used in 10, 2, 8, 16-conversion, for example
var a = [5,6,7,8,9, "a", "BB", 100];
for (var i=0; i<a.length; i++) {
document.write (a[i].tostring () + "binary is" + a[i].tostring (2) + ", octal is" + a[i].tostring (8) + ", Hex is" + A[i].tos Tring (16)); -> 4,5
}
Output results
5 binary is 101, octal is 5, Hex is 5
6 binary is 110, octal is 6, Hex is 6
7 binary is 111, octal is 7, Hex is 7
8 binary is 1000, octal is 10, Hex is 8
9 binary is 1001, octal is 11, Hex is 9
The binary of A is a, octal is a, and hexadecimal is a.
BB's binary is bb, octal is bb, Hex is BB
100 binary is 1100100, octal is 144, Hex is 64
The conversion can only be done in the element, and if the entire array is converted, the array is returned intact
toLocaleString
Returns a local format string, primarily used on a Date object
var a = new Date ();
document.write (A.tostring ()); -> Sat Aug 8 17:28:36 utc+0800 2009
document.write (A.tolocalestring ()); -> August 8, 2009 17:28:36
document.write (A.tolocaledatestring ()); -> August 8, 2009
The difference is that toString () returns to the standard format, tolocalestring () returns the local format full date (in Control Panel >> Regional and Language Options, by modifying [time] and [Long Date] formats), tolocaledatestring () like toLocaleString (), just a little time.
valueof
The output is similar to ToString (), but ToString () returns the string type and valueof () returns the original object type, depending on the original value returned by different objects.
var a = [1,2,3,[4,5,6,[7,8,9]]];
var B = new Date ();
var C = true;
var d = function () {
Alert ("Sunnycat");
};
document.write (A.valueof ()); -> 1,2,3,4,5,6,7,8,9
document.write (typeof (A.valueof ())); -> Object
document.write (B.valueof ()); -> 1249874470052
document.write (typeof (B.valueof ())); -> number
document.write (C.valueof ()); -> true
document.write (typeof (C.valueof ())); -> Boolean
document.write (D.valueof ()); -> function () {alert ("Sunnycat");}
document.write (typeof (D.valueof ())); -> function
The array is also an object, so typeof (A.valueof ()) returns object, and the return is still a multidimensional array
var a = [1,2,3,[4,5,6,[7,8,9]]];
var AA = a.valueof ();
document.write (aa[3][3][1]); -> 8
The Date object returns the number of milliseconds from January 1, 1970,
The math and Error objects have no valueof method