Sintesi sul linguaggio JavaScript


(appunti presi studiando il libro Javascript APOGEO) INTRODUZIONE AL JAVASCRIPT
Javascript (in origine si chiamava Livescript ma per il marketing si cambiò in JavaScript).
Inventato da Netscape.
Incluso nei Browser.
Sintatticamente somiglia al C, C++ e Java.
Oggetti simili al Perl.
Meccanismo di ereditarietà analogo ai linguaggi Self e NewtonScript.
Versioni: Core, Embedded ed estesa.
1.0, 1.1, 1.2, 1.3. Il nome Javascript è proprietà di Netscape mentre Microsoft usa JScript.
Non è una versione semplificata del Java (Sun Microsystems), sono molto diversi.
Però JS e Java dispongono di caratteristiche disgiunte e complementari tanto che possono essere usati bene insieme.
In genere si parla di "JavaScript lato client".
Solo l'Explorer supporta il VBScript.
Esiste anche JavaScript lato server.
Oltre ai browser può essere usato anche per altro.

<script language="JavaScript"></script>

Parola Metodo: indica una funzione o una procedura

document.write Molto usato per generare codice HTML anche partendo da "zero"
Il DHTML si basa proprio sulla caratteristica dei JScript di modificare contenuto e aspetto dei documenti in tempo reale.

Con i gestori di eventi si gestiscono i comportamenti.
Vera potenza del JS lato client: possibilità di accedere a gerarchie di oggetti basate sul contenuto della pagina Web.
Ex:manipolare immagini presenti nella pagina.

I JS non definisce alcun metodo per i frame.

location: preleva la pagina all'indirizzo URL
history: avanti e dietro nella cronologia (come i tasti del Browser)

Controllo sui Moduli: già nel lato client invece di mandarli al server e verificarli.

Cookie: piccola quantità di inf archiviati sul client.

window.setTimeout() blocco di codice
setInterval()

JS non ha funzioni grafiche.


STRUTTURA LESSICALE
Distingue tra Maiuscole e Minuscole!!
ex: while e non While! (mentre in HTML non c'è distinzione)
Token: parola chiave, variabile, numero, nome funzione >> il JavaScript ignora spazi, tabulazioni e avanzamenti di riga tra token.
Mettere sempre il ";" a fine istruzione anche se ci sono eccezioni.

Commenti: // e /*...*/ o
/*
*
*
*
*/

<!-- 
...
--> 
Viene considerato come commento per i browser che non supportano JavaScript .
Letterali: ..
Identificatori: il primo carattere: carattere ascii (maiusc. o min.) o _ o $ e non numeri!
Attenzione alle parole chiavi.

TIPI DI DATI E VALORI
3 tipi di dati primitivi: Numeri, Stringhe di Testo, Valori di verità booleani.
2 tipi di dati composti: Oggetti e Array.
Considera le funzioni come un tipo di dati a sé stante.
Funzioni e Array tipi specializzatti di oggetti.

Numeri:
Non fa differenza tra interi e virgola mobile >> sono tutti in virgola mobile (8 byte) >> letterale numerico
Letterali interi
Letterali ottali 0 + cifre da 0 a 7
Letterali esadecimali 0x + stringa di cifre esadecimali
Letterali a virgola mobile 1.34234523e-32 (va bene anche e minuscola)
toString()  Converte un numero in stringa.
Infinity e -Infinity: se il numero va in OverFlow
NaN (not-a-number): il risultato è indefinito o è un errore >> isNaN()

Stringhe:

I letterali possono essere inseriti all'interno dei programmi racchiudendoli da apici (singoli e doppi).
Gli apici singoli e doppi si usano alternativamente!
ex:  'Il suo nome è: "sandro" '.
E' buona norma usare gli apici singoli perché in HTML si usano i doppi apici.
Prima di ogni apostrofo mettere il BackSlash: \
\b  BackSpace
\f  Avanzamento pagina (Form Feed)
\n  Avanzamento riga (New Line)
\r  Ritorno a capo (Carriage Return)
\t  Tabulazione
\'  Apostrofo o Singolo Apice
\"  Doppio Apice
\\  BackSlash
\XXX  Carattere di codifica latin-1 3 cifre ottali tra 0 e 377
\xXX XX  2 Cifre decimali

Il + per concatenare più stringhe
s.length
sub=s.substring(1,4);
last_char=s.charAt(s.length-1);
i=s.indexOf('a); trova la posizione della prima 'a'
Le stringhe sono indicizzate partendo da 0.

Valori booleani:
true e false

Funzioni:
Porzione di codice scritta una volta sola e richiamata più volte.
Può ricevere argomenti (parametri)

function square(x)
{
    return x*x;
}

Le funzioni sono considerate valori di prima classe cioè come tipi di dati quindi si possono usare come oggetti.
Se la funzione viene assegnata a una proprietà di un oggetto viene detta metodo di quell'oggetto.
Leterali funzione ex: var square = new Function("x","return x*x;");  Viene detta funzione anonima

Oggetti:
Sono una raccolta di blocchi di dati identificabili tramite nomi.
Questi valori sono detti proprietà dell'oggetto.
document.write("esempio");

Gli oggetti in Javascript possono fungere da array associativi, possono cioè associare valori arbitrari a stringhe arbitrarie.
immagine["larghezza"}
Creazione oggetti:
var o= new Object();
Impostare la proprietà:
o.valore=2.5;
var o={valore:2.5, note:no}

Array
var a= new Array();
a[0]=1;
oppure
var a=[1,"sandro",true,{x:1,y:3}];


Null = Nessun valore
Undefined = Quando una variabile non esiste

VARIABILI
Il JavaScript essendo poco tipicizzato ogni variabile può contenere di tutto.
Le variabili sono globali mentre quelle definite in una funzione sono locali alla funzione.
Dichiarare tutte le variabili con var.
Una variabile globale è nascosta alla funzione.

Garbage collection: il javascript libera automaticamente la memoria dalle variabili non più usate.

ESPRESSIONI E OPERATORI
x+y+z=(x+y)+z Ha l'associatività destrorsa
La divisione per 0 produce + o - Infinity (da Javascript 1.3)
Mentre 0/0 NaN
% operatore modulo: 4.3%2.1= = 0.1
i=0;
j=++i incrementa di 1; //-- decrementa

== true se i due operandi sono uguali ( e se sono di tipo diversi li rende dello stesso tipo)
I numeri, le stringhe e i valori booleani vengono confrontati per valore.
Gli oggetti, gli array e le funzioni sono confrontati per riferimento.
Se un valore è null e l'altro undefined, sono uguali. "1"==true sono due elementi uguali.
=== uguali anche ne tipo
!= diverso
"Zoo"<"attenzione" è vera perché la Z è maiuscola
&& AND logico
|| OR
! NOT
a op= b
a=a op b

operatore condizionale ? :      Ex:x>0 ? x*y : -x*y

void: restituisce sempre undefined
<a href="javascript:void window.open();">apre finestra</a>

ISTRUZIONI
if (espressione)
    istruzione

oppure
if (espressione)
    {blocco di istruzioni}
else
    {altro blocco di istruzioni}

Else if

Switch(n) {

case1:...
            break;
case2:
default: se tutti i casi falliscono
}

while (espressione)
        istruzione

Do
    istruzione
while(espressione);

for (inizializza;test;incremento)
istruzione

for (prop in mio_oggetto)
    document.write("nome: "+prop+"; valore: "+mio_oggetto[prop],"<br>");
}

Break