Ali obstaja pri javascript kaj podobnega?

V Clipper-ju je obstajal način, ki je bil zelo uporaben in me zanima če je v javascript kaj podobnega.
Če se je pred polje dodalo znak &, se je upoštevala vsebina polja.
Bolj razumljivo bo z primerom
USE TABELA
S tem ukazom se je določilo katero tabelo bomo uporabljali in TABELA je seveda ime tabele. Ker pa smo včasih potrebovali odpret različne tabele, je bilo možno

tabela = 'TABELA_MERKATOR'
USE &tabela

In je uporabljal 'TABELA_MERKATOR'

Ko se je prijavil drug uporabnik

tabela = 'TABELA_TUS'
USE &tabela

Drug primer:
Ker v tabelah ni ponavljajočih pol, se je definiralo BREME01, BREME02…
Seštevanje v zanki je bilo
SUMA = SUMA + BREME&i
i je seveda moral biti besedilo 2 mesta z levo nulo (01,02…).

9 odgovorov

Lažje bo, če boš povedal dejansko težavo. Javascript ne pozna "USE tabela", kot so to imeli xBase programski jeziki. Razumem, da bi do nečesa rad dostopal dinamično, ampak do česa?

2

Namesto tega:
var data = google.visualization.arrayToDataTable([
['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]
]);

to:

var polje = "['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]";

var data = google.visualization.arrayToDataTable([&polje]);

Bol vsakdanji primer

  polje = "<";
  for (var i = 1; i &polje n; i++)

  da se "od zunaj" krmili for zanka

Samo ta & vrzi ven...
Saj mogoce nimam pojma, ampak to jaz razumem kot: ali ima javascript spremenljivke?

1

Tudi jst malenkost tavam v temi, kakšno je sploh vprašanje.

Ampak, če pogledam prvi primer:

  1. Ti moraš poskrbet, da dobiš 2d tabelo, torej:
var polje = [['Year', 'Sales', 'Expenses'],
['2004', 1000, 400],
['2005', 1170, 460],
['2006', 660, 1120],
['2007', 1030, 540]];
  1. potem to 2d polje samo pljuneš kot parameter v funkcijo:
var data = google.visualization.arrayToDataTable(polje);

Kar se pa tiče drugega primera: včasih bi bile res mokre sanje, če bi lahko operator dal v spremenljivko in kontroliral for zanko takole.

Ampak ne gre.

... če vsaj približno razumem dilemo ...

1

Macro operator iz Clipperja bi v Javascriptu lahko nadomestil z uporabo eval(), ampak je bila to že v Clipperju zelo zelo slaba praksa, pa v Javascriptu ni nič boljša. :)

Macro operator se je v Clipper verziji 5 zelo lepo nadomestil z uporabo code blocks, v Javascriptu bi pa lahko večino tega, kar ti pričakuješ, rešil z uporabo anoymous function, tvoj primer zanke, recimo, takole:

var primerjaj = function(a,b) { return a < b; };
for (var i = 1; primerjaj(i, n); i++) {
  // do whatever
}
1

Poskusil sem sledeče:

<html>
  <head>
    <script type="text/javascript">
        var primerjaj = function(a) { return "i < 3;" };
        for (var i = 1; primerjaj(i); i++) {
            alert(i);
        }
    </script>
  </head>
 <body>
 </body>
</html>

Deluje, vendar se je zanka izvajala do neskončnosti, se pravi, da ni prenesel vsebine v return, oziroma se ni upoštevala.

Pravilno pa deluje sledeče:

<html>
  <head>
    <script type="text/javascript">
        var primerjaj = function(a) {
        if (a < 3) {
            return true;
            }
        else {
            return false;
        }
        };
        for (var i = 1; primerjaj(i); i++) {
            alert(i);
        }
    </script>
  </head>
 <body>
 </body>
</html>

Vini-jev predlog je tisto kar sem iskl.

Vhala vsem za pomoč.

Seveda se je izvajala do neskončnosti. :)

"i < 3;" je tipa string in string s to vsebino je v Javascriptu enak logičnemu true. Zakaj si zadevo dal v narekovaje? Samo umakni narekovaje, pa bo delovalo. Ni potrebe po tistem dolgem ifu.

Tole:

return a < 3;

je povsem enako kot:

if (a < 3) {
  return true;
}
else {
  return false;
}

le slednje je mnogo daljše in bolj nepregledno :)

3

Res je (testirano). Napačno sem razmišljal, da je potrebno prenesti del ukaza...