<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Execuci%C3%B3_de_Javascript_en_l%C3%ADnia_de_comandes</id>
	<title>Execució de Javascript en línia de comandes - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Execuci%C3%B3_de_Javascript_en_l%C3%ADnia_de_comandes"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Execuci%C3%B3_de_Javascript_en_l%C3%ADnia_de_comandes&amp;action=history"/>
	<updated>2026-08-30T09:06:35Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=Execuci%C3%B3_de_Javascript_en_l%C3%ADnia_de_comandes&amp;diff=257725&amp;oldid=prev</id>
		<title>Joan: /* Alternativa a Spidermonkey */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Execuci%C3%B3_de_Javascript_en_l%C3%ADnia_de_comandes&amp;diff=257725&amp;oldid=prev"/>
		<updated>2018-09-19T15:59:25Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Alternativa a Spidermonkey&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Introducció=&lt;br /&gt;
Vull utilitzar Javascript des de la consola (igual que es fa amb altres llenguatges de programació com Perl o Python). El que es vol és incidir amb el concepte de què Javascript és un llenguatge de programació i que no té perquè estar associat a un navegador web. Concretament, Javascript es pot utilitzar com a llenguatge de script per fer diverses tasques de programació o d'administració.&lt;br /&gt;
&lt;br /&gt;
=Referències=&lt;br /&gt;
=Desenvolupament=&lt;br /&gt;
En la consola faig ''js'' (com si cridés a l'intèrpret de comandes ''js''), i per defecte em diu d'instal.lar Rhino, que és un intèrpret de Javascript basat en Java. Però jo vull un intèrpret basat en C: SpiderMonkey.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ js&lt;br /&gt;
El programa «js» no està instal·lat actualment.  Podeu instal·lar-lo si escriviu:&lt;br /&gt;
sudo apt-get install rhino&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There's Rhino (Java implementation of Mozilla's JavaScript engine),&lt;br /&gt;
SpiderMonkey (C implementation of the same, but not really usable as a&lt;br /&gt;
scripting environment)&lt;br /&gt;
&lt;br /&gt;
Mozilla SpiderMonkey&lt;br /&gt;
*http://www.mozilla.org/js/spidermonkey/&lt;br /&gt;
&lt;br /&gt;
*https://developer.mozilla.org/En/SpiderMonkey/Introduction_to_the_JavaScript_shell&lt;br /&gt;
The JavaScript shell is a command-line program included in the SpiderMonkey source distribution. It is the JavaScript equivalent of Python's interactive prompt, the Lisp read-eval-print loop, or Ruby's irb. This article explains how to use the shell to experiment with JavaScript code and run JavaScript programs.&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey is Mozilla's JavaScript engine written in C/C++. It is used in various Mozilla products, including Firefox, and is available under MPL/GPL/LGPL tri-license.&lt;br /&gt;
&lt;br /&gt;
SpiderMonkey 1.8.5 is the most recent standalone source code release.  It implements JavaScript 1.8.5, and it is largely the same engine that shipped with Firefox 4. You can download full source code here: &lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Getting_SpiderMonkey_source_code&lt;br /&gt;
&lt;br /&gt;
Document de la Build Documentation (compil.lació i instal.lació):&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Getting_SpiderMonkey_source_code&lt;br /&gt;
&lt;br /&gt;
Descarrego js185-1.0.0.tar.gz&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd js-1.8.5/js/&lt;br /&gt;
$ cd src&lt;br /&gt;
$ ./configure&lt;br /&gt;
o millor: (llegir bé el document)&lt;br /&gt;
./configure --bindir=/usr/local/bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(es genera el fitxer Makefile)&lt;br /&gt;
&lt;br /&gt;
'''NOTA''': si no funciona el configure i no es genera el fitxer ''Makefile'' és perquè segurament no tens instal.lades les eines bàsiques de compilació:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install build-essential&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Compilo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This builds an executable named js in the current directory. You can test it with ./js --help, which displays a help page. At this point, you're ready to run and try out the shell.&lt;br /&gt;
&lt;br /&gt;
Es genera l'executable '''js''', i en aquest moment ja disposo de l'intèrpret de comandes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./js&lt;br /&gt;
js&amp;gt; 2+3&lt;br /&gt;
5&lt;br /&gt;
js&amp;gt; quit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
i ara l'instal.lo en la màquina:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Mac, Linux, or UNIX, you can install SpiderMonkey on your system with the additional command make install. This installs the shared library to /usr/local/lib, and the C header files to /usr/local/include. For some reason it won't install the js executable to/usr/local/bin, though.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./js --help&lt;br /&gt;
JavaScript-C 1.8.5 2011-03-31&lt;br /&gt;
usage: js [options] [scriptfile] [scriptarg...]&lt;br /&gt;
Options:&lt;br /&gt;
  -h            Display this information&lt;br /&gt;
  -z            Create a split global object&lt;br /&gt;
                Warning: this option is probably not useful&lt;br /&gt;
  -P            Deeply freeze the global object prototype&lt;br /&gt;
  -s            Toggle JSOPTION_STRICT flag&lt;br /&gt;
  -w            Report strict warnings&lt;br /&gt;
  -W            Do not report strict warnings&lt;br /&gt;
  -x            Toggle JSOPTION_XML flag&lt;br /&gt;
  -C            Compile-only; do not execute&lt;br /&gt;
  -i            Enable interactive read-eval-print loop&lt;br /&gt;
  -j            Enable the TraceMonkey tracing JIT&lt;br /&gt;
  -m            Enable the JaegerMonkey method JIT&lt;br /&gt;
  -a            Always method JIT, ignore internal tuning&lt;br /&gt;
                This only has effect with -m&lt;br /&gt;
  -p            Enable loop profiling for TraceMonkey&lt;br /&gt;
  -d            Enable debug mode&lt;br /&gt;
  -b            Print timing statistics&lt;br /&gt;
  -t &amp;lt;timeout&amp;gt;  Interrupt long-running execution after &amp;lt;timeout&amp;gt; seconds, where&lt;br /&gt;
                &amp;lt;timeout&amp;gt; &amp;lt;= 1800.0. Negative values indicate no timeout (default).&lt;br /&gt;
  -c &amp;lt;size&amp;gt;     Suggest stack chunk size of &amp;lt;size&amp;gt; bytes. Default is 8192.&lt;br /&gt;
                Warning: this option is currently ignored.&lt;br /&gt;
  -o &amp;lt;option&amp;gt;   Enable a context option flag by name&lt;br /&gt;
                Possible values:&lt;br /&gt;
                  anonfunfix:  JSOPTION_ANONFUNFIX&lt;br /&gt;
                  atline:      JSOPTION_ATLINE&lt;br /&gt;
                  tracejit:    JSOPTION_JIT&lt;br /&gt;
                  methodjit:   JSOPTION_METHODJIT&lt;br /&gt;
                  relimit:     JSOPTION_RELIMIT&lt;br /&gt;
                  strict:      JSOPTION_STRICT&lt;br /&gt;
                  werror:      JSOPTION_WERROR&lt;br /&gt;
                  xml:         JSOPTION_XML&lt;br /&gt;
  -v &amp;lt;version&amp;gt;  Set the JavaScript language version&lt;br /&gt;
                Possible values:&lt;br /&gt;
                  150:  JavaScript 1.5&lt;br /&gt;
                  160:  JavaScript 1.6&lt;br /&gt;
                  170:  JavaScript 1.7&lt;br /&gt;
                  180:  JavaScript 1.8&lt;br /&gt;
                  185:  JavaScript 1.8.5 (default)&lt;br /&gt;
  -f &amp;lt;file&amp;gt;     Load and execute JavaScript source &amp;lt;file&amp;gt;&lt;br /&gt;
                Note: this option switches to non-interactive mode.&lt;br /&gt;
  -e &amp;lt;source&amp;gt;   Execute JavaScript &amp;lt;source&amp;gt;&lt;br /&gt;
                Note: this option switches to non-interactive mode.&lt;br /&gt;
  -S &amp;lt;size&amp;gt;     Set the maximum size of the stack to &amp;lt;size&amp;gt; bytes&lt;br /&gt;
                Default is 500000.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''NOTA''' per als usuaris de Windows. '''Spidermonkey''' també es pot instal.lar per a Windows. Veure https://developer.mozilla.org/En/SpiderMonkey/Build_Documentation o bé cercar ''spidermonkey windows'' al Google.&lt;br /&gt;
*http://www.kahusecurity.com/2010/spidermonkey-1-8-5-for-windows/&lt;br /&gt;
&lt;br /&gt;
Llegir des de la línia de comandes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
js&amp;gt; readline()&lt;br /&gt;
hola mon&lt;br /&gt;
&amp;quot;hola mon&amp;quot;&lt;br /&gt;
&lt;br /&gt;
js&amp;gt; valor=readline()&lt;br /&gt;
hola mon&lt;br /&gt;
&amp;quot;hola mon&amp;quot;&lt;br /&gt;
js&amp;gt; print(valor);&lt;br /&gt;
hola mon&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Veure més possibilitats, '''Shell global objects''':&lt;br /&gt;
*https://developer.mozilla.org/en-US/docs/SpiderMonkey/Shell_global_objects&lt;br /&gt;
&lt;br /&gt;
Primer exemple, fitxer Y.js (és un exemple que està a la carpeta src/)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// The Y combinator, applied to the factorial function&lt;br /&gt;
&lt;br /&gt;
function factorial(proc) {&lt;br /&gt;
    return function (n) {&lt;br /&gt;
        return (n &amp;lt;= 1) ? 1 : n * proc(n-1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Y(outer) {&lt;br /&gt;
    function inner(proc) {&lt;br /&gt;
        function apply(arg) {&lt;br /&gt;
            return proc(proc)(arg);&lt;br /&gt;
        }&lt;br /&gt;
        return outer(apply);&lt;br /&gt;
    }&lt;br /&gt;
    return inner(inner);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;5! is &amp;quot; + Y(factorial)(5));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./js Y.js&lt;br /&gt;
5! is 120&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./js -e &amp;quot;print('hola');&amp;quot;&lt;br /&gt;
hola&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
També podem utilitzar el mode interactiu:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./js -i&lt;br /&gt;
js&amp;gt; print('hola')&lt;br /&gt;
hola&lt;br /&gt;
js&amp;gt; 3*2&lt;br /&gt;
6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Si el fitxer '''js''' no està en la mateixa ruta que l'executable '''js''' es pot fer un softlink, per tal d'evitar-nos posar les rutes. Per exemple, a Linux:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cd ~/M06_WEC/sintaxi&lt;br /&gt;
$ ln -s ~/M06_WEC/js-1.8.5/js/src/js ~/M06_WEC/sintaxi/js&lt;br /&gt;
$ ls -l&lt;br /&gt;
$ ./js script.js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Alternativa a Spidermonkey==&lt;br /&gt;
Si el que vols és provar el teu codi Javascript per fer proves, pots provar entorns ''encastats'' dins d'un navegador web, com ara el que pots trobar en el curs de Javascript de Codeacademy (http://www.codecademy.com). Pot ser una bona alternativa per als usuaris que han tingut problemes per instal.lar Spidermonkey.&lt;br /&gt;
&lt;br /&gt;
També pots provar:&lt;br /&gt;
*http://jsfiddle.net/Ac6CT/ (pots utilitzar ''document.write'' per mostrar el resultat per pantalla)&lt;br /&gt;
&lt;br /&gt;
*http://codepen.io/joanillo/pen/PPjWaN&lt;br /&gt;
&lt;br /&gt;
==Execució de Javascript dins un navegador web==&lt;br /&gt;
Ara que ja hem vist que el Javascript existeix i té raó de ser fora dels navegadors web, normalment nosaltres integrarem Javascript dins del navegador web (Mozilla Firefox, Chrome o qualsevol navegador que ho suporti).&lt;br /&gt;
&lt;br /&gt;
La primera prova (http://www.w3schools.com/js/js_howto.asp) és el fitxer '''demo.htm''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;My First Web Page&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p id=&amp;quot;demo&amp;quot;&amp;gt;My First Paragraph&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
document.getElementById(&amp;quot;demo&amp;quot;).innerHTML=&amp;quot;My First JavaScript&amp;quot;;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Obre aquest fitxer amb un navegador web, i fixa't en què apareix en el paràgraf.&lt;br /&gt;
&lt;br /&gt;
The tag HTML '''&amp;lt;script&amp;gt;''' s'utilitza per inserir codi JavaScript dins un document HTML. L'atribut de HTML '''id''' s'utilitza per identificar elements HTML. Típicament JavaScript s'utilitza per manipular elements HTML existents. Per accedir a un element HTML des de JavaScript identificat per '''id''' s'utilitza el mètode '''document.getElementById()'''.&lt;br /&gt;
&lt;br /&gt;
Ara bé, per tal de què s'executi el script correctament (en la pantalla ha d'aparèixer ''My First JavaScript'' en comptes de ''My First Paragraph''), el nostre navegador ha de suportar Javascript. Suporten tots els navegadors web Javascript. Doncs no... per exemple links2 és un navegador textual de consola. Aquests tipus de navegador van molt bé per a les persones cegues.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo apt-get install links2&lt;br /&gt;
$ links2 demo.htm &lt;br /&gt;
$ links2 -g demo.htm &lt;br /&gt;
&lt;br /&gt;
                               My First Web Page                                &lt;br /&gt;
                                                                                &lt;br /&gt;
   My First Paragraph                                                           &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Qui havia dit que un navegador web no pot ser en mode consola??? Pot ser molt útil per navegar per Internet quan et connectes en una sessió remota contra un servidor...)&lt;br /&gt;
&lt;br /&gt;
Efectivament, aquest navegador no té suport per a Javascript i apareix ''My First Paragraph'' en comptes de ''My First Javascript''.&lt;br /&gt;
&lt;br /&gt;
=Exemples=&lt;br /&gt;
L'operador suma (+) pot servir per concatenar cadenes, o per sumar números. Fixa't bé en el següent exemple.&lt;br /&gt;
&lt;br /&gt;
fitxer '''parseInt.js''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//exemple operador suma. No és el mateix sumar que concatenar&lt;br /&gt;
&lt;br /&gt;
print('Introdueix dos números:');&lt;br /&gt;
n1=readline();&lt;br /&gt;
n2=readline();&lt;br /&gt;
print('concatena!');&lt;br /&gt;
print(n1+n2);&lt;br /&gt;
&lt;br /&gt;
print('Introdueix dos números:');&lt;br /&gt;
n1=parseInt(readline());&lt;br /&gt;
n2=parseInt(readline());&lt;br /&gt;
print('suma!');&lt;br /&gt;
print(n1+n2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
opció -e: serveix per executar una sentència invocant-la des de la línia de comandes. Per ex:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./js -e 'print(3+2)'&lt;br /&gt;
$ ./js -e 'print(3+2);print(4+2);'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Entrega=&lt;br /&gt;
Recorda la '''normativa''' per entregar les pràctiques al Google Classroom: [[ASIX-M10-UF2#Normativa_d.27entrega_de_les_pr.C3.A0ctiques_al_Google_Classroom]]. En aquesta pràctica introductòria el que hauràs d'entregar en el Schoology és la demostració que tens ben instal.lat un intèrpret de JS en línia de comandes (per ex, captura de pantalla), i entregaràs diferents exemples que has fet, posant de manifest les diferents opcions que hi ha en el SpiderMonkey (./js --help). Concretament opcions -e (execute), -f (file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, setembre 2012&lt;br /&gt;
[[Categoria: IES Jaume Balmes]]&lt;br /&gt;
[[Categoria: Assignatura DAW-M06-WEC]]&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>