var t = [1,2,3]
oK(t) // 0: 1
// 1: 2
// 2: 3
// length: 3
t[7] = 666
oK(t) // 0: 1
// 1: 2
// 2: 3
// 7: 666
// length: 8
write(t[6]) // undefined
Huom: Alkioille, joille ei aseteta arvoa, ei tarvitse (välttämättä) tehdä tilanvarausta: Kuten kaikki jo varmaan muistavat, olemattoman kentän arvon kysely palauttaa undefined!
Jos indeksoidaan hyvin suurella indeksillä, tapahtuu kiinnostavaa. Vertaa seuraavia:
var t = [1,2,3]
t[700000000] = 666
oK(t) // 0: 1
// 1: 2
// 2: 3
// 700000000: 666
// length: 700000001
//--------
ja
var t = [1,2,3]
t[70000000000] = 666
oK(t) // 0: 1
// 1: 2
// 2: 3
// length: 3
// 70000000000: 666
// --------
Opimmeko tästä jotakin? Ja jos niin mitä?
var t = [1,2,3]
write(t[2]) // 3
oK(t) // 0: 1
// 1: 2
// 2: 3
// length: 3
// --------
t.length = 2
write(t[2]) // undefined
oK(t) // 0: 1
// 1: 2
// length: 2
// --------
t.length = 8
write(t[2]) // undefined
oK(t) // 0: 1
// 1: 2
// 2: 3
// length: 8
//--------
var t = [1,2,3];
write(t.length); // 3
t[10000] = "kissa";
write(t.length); // 10001
write(t[10000]); // kissa
write(t[7000]); // undefined
t.length = 2;
write(t.length); // 2
write(t[2]); // undefined
write(t[-1]); // undefined
write(t["abc"]); // undefined
var o = new Object();
write(t[o]); // undefined
t[-1] = 234;
write(t[-1]); // 234
t["abc"] = {a:21, b:34}
write(t["abc"]); // [object Object]
write(t["abc"].b); // 34
t[o] = 3.14;
write(t[o]); // 3.14
write(t[undefined]); // undefined
t[undefined] = 666;
write(t[undefined]); // 666
t[NaN] = "appelsiini";
write(t[NaN]); // appelsiini
var a = [1,2,3]; var b = new Array(1,2,3); var c = Array(1,2,3);
var a = new Array(3);
write(a.length); // 3
var b = Array("3");
write(b.length); // 1
var t = [1,2,3,4,5,6,7, "kissa"]; for (var i=0; i<t.length; ++i) t[i] += 2; write(t); // 3,4,5,6,7,8,9,kissa2(Huomaa kissa2!)
var t = [1,2,3,4,5,6,7, "kissa"];
var i=0;
t.forEach(function () {t[i] += 2, ++i});
write(t); // 3,4,5,6,7,8,9,kissa2
var t = [1,2,3,4,5,6,7, "kissa"]; var i; for (i in t) t[i] += 2; write(t); // 3,4,5,6,7,8,9,kissa2
var t = [1,2,3,4,5,6,7, "kissa"]; var i; for (i of t) i += 2; write(t); // 1,2,3,4,5,6,7,kissaTässä muuttujaan i vain sijoitellaan laskettuja arvoja. Ja i käyttäytyy toistolauseen alialgoritmissa arvoparametrin tapaan. Se siis ei ole viite taulukon alkioon vaan se on alkion arvo.
var t = [1,2,3,4,5,6,7];
var i=0;
t.forEach(function () {t[i] *= 2, ++i});
write(t); // 2,4,6,8,10,12,14
var t = [1,2,3,4,5,6,7];
var i=0;
Array.forEach(t, function () {t[i] *= 2, ++i});
write(t); // 2,4,6,8,10,12,14
var m = [[1,2,3], [4,5,6]]; write(m[1][0]); // 4 var sum=0; for (var i=0; i<m.length; ++i) for (var j=0; j<m[i].length; ++j) sum += m[i][j]; write(sum); // 21
var m = new Array(2);
for (i = 0; i < m.length; i++) {
m[i] = new Array(3);
for (j = 0; j < m[i].length; j++) {
m[i][j] = 3*i+j +1;
}
}
Wed Oct 23 2013 13:23:47 GMT+0300 (EEST)
write(new Date("December 25, 1995 13:30:00")); // Mon Dec 25 1995 13:30:00 GMT+0200 (Eastern European Standard Time)
write(new Date("Feb 31, 1995 13:30:00")); // Fri Mar 03 1995 13:30:00 GMT+0200 (Eastern European Standard Time)
write(new Date("Feb 69, 1995 13:30:00")); // Invalid Date
Kovin anglosaksiselta vaikuttaa tuo parametri, mutta viisauttakin
siihen näkyy rakennetun.
write(new Date(2013,9,23)); // Wed Oct 23 2013 00:00:00 GMT+0300 (Eastern European Summer Time) write(new Date(2013,9,23, 13, 43, 35)); // Wed Oct 23 2013 13:43:35 GMT+0300 (Eastern European Summer Time)
Tutkitaanpa vaikka kauanko juuri tämän (new Date()).getTime()-aksessorin 1000000-kertainen suoritus kuluttaa aikaa:
var alkuaika = (new Date()).getTime();
for (var i=0; i<1000000; ++i)
var x = (new Date()).getTime();
var loppuaika = (new Date()).getTime();
write("Aikaa kului " + (loppuaika-alkuaika) + " ms."); // esim. 348, 351, 355, 354, ...
Aika nopeaa. (Suoritus työpöytäkoneellani 20.11.2018 klo 13:26)
var f = new Function("a","b", "return a+b")
write(f(2,5)) // 7
var g = Function("k", "t", "var i; for (i=0; i<k; ++i) write(t)")
g(3, "tööt") // tööt
// tööt
// tööt