Copia, passaggio e confronto di dati

Il modo in cui i dati vengono copiati, passati e confrontati in JScript dipende dal modo in cui sono memorizzati, che a sua volta dipende dal tipo di dati. In JScript i dati vengono memorizzati per valore o per riferimento.

Per valore oper riferimento

In JScript i numeri e i valori Boolean true e false vengono copiati, passati e confrontati per valore. Durante questo processo viene allocato uno spazio in memoria in cui viene copiato il valore dell'originale. Le modifiche all'originale non hanno alcun effetto sulla copia e viceversa. Valore originale e copia sono infatti due entità distinte. Due numeri o valori Boolean sono considerati uguali se hanno lo stesso valore.

In JScript gli oggetti, le matrici e le funzioni vengono copiate, passate e confrontate per riferimento. Durante questo processo viene sostanzialmente creato un riferimento all'elemento originale e utilizzato come se fosse una copia. Le modifiche all'originale vengono riportate anche nella copia e viceversa. In effetti esiste una sola entità, in quanto la copia non è che un altro riferimento ai dati.

Quando si esegue un confronto per riferimento, le due variabili devono riferirsi esattamente alla stessa entità. Solo così il confronto verrà eseguito correttamente. Due oggetti Array distinti, ad esempio, risulteranno sempre diversi dopo il confronto, pur contenendo gli stessi elementi. Affinché il confronto abbia esito positivo, una delle variabili deve costituire un riferimento dell'altra. Per controllare se due matrici contengono gli stessi elementi, confrontare i risultati del metodo toString().

Infine, le stringhe vengono copiate e passate per riferimento. La modalità di confronto delle stringhe è diversa a seconda che le stringhe siano o meno oggetti. Due oggetti String, creati con new String("stringa"), vengono confrontati per riferimento. Se invece una o entrambe le stringhe sono costituite da valori letterali o primitivi di stringa, verranno confrontate per valore. Per ulteriori informazioni vedere Assegnazioni e uguaglianza JScript.

Nota

A causa della struttura dei set di caratteri ASCII e ANSI, se ordinate in sequenza, le lettere maiuscole precedono le lettere minuscole. Per questo motivo in un confronto, "Zoo" risulterebbe minore di "aardvark". Se si desidera eseguire un confronto senza distinzione tra maiuscole e minuscole, è possibile utilizzare toUpperCase() o toLowerCase() per entrambe le stringhe.

Parametri di funzione

In JScript, quando si passa un parametro a una funzione per valore, viene creata una copia distinta del parametro che esiste soltanto nell'ambito della funzione. Benché gli oggetti e le matrici vengano passati per riferimento, se vengono sovrascritti direttamente con un nuovo valore nella funzione, tale valore non verrà riflesso all'esterno della funzione. Solo le modifiche alle proprietà degli oggetti o agli elementi delle matrici saranno visibili all'esterno della funzione.

Nel programma descritto di seguito, ad esempio, sono presenti due funzioni. La prima sovrascrive il parametro di input, impedendo inoltre che le modifiche a questo apportate abbiano effetti sull'argomento di input originale. La seconda modifica la proprietà dell'oggetto senza sovrascriverlo.

function clobber(param) {
   // Overwrite the parameter; this will not be seen in the calling code
   param = new Object();
   param.message = "This will not work.";
}

function update(param) {
    // Modify the property of the object; this will be seen in the calling code.
    param.message = "I was changed.";
}

// Create an object, and give it a property.
var obj = new Object();
obj.message = "This is the original.";

// Call clobber, and print obj.message.
clobber(obj);
print(obj.message);

// Call update, and print obj.message.
update(obj);
print(obj.message);

L'output del codice è il seguente:

This is the original.
I was changed.

Confronto fra i dati

In JScript i dati vengono confrontati per valore o per riferimento. Quando si esegue un test per valore, vengono confrontati due elementi distinti per verificare se sono uguali. Tale confronto viene in genere eseguito byte per byte. Quando si esegue un confronto per riferimento, i due elementi devono riferirsi esattamente alla stessa entità. In caso affermativo, verranno considerati uguali. In caso contrario, verranno considerati diversi, anche se includono gli stessi valori byte per byte.

Le stringhe possono essere confrontate per valore o per riferimento, a seconda del fatto che siano o meno oggetti. Se entrambe le stringhe sono oggetti String, verranno confrontate per riferimento. In caso contrario, le stringhe verranno confrontate per valore. In questo modo due stringhe verranno considerate uguali qualora abbiano lo stesso contenuto anche se create distintamente. Per confrontare i valori di due oggetti String, innanzitutto convertire gli oggetti in stringhe non oggetto mediante i metodi toString o valueOf, quindi confrontare le stringhe così ottenute. Per ulteriori informazioni vedere Assegnazioni e uguaglianza JScript.

Vedere anche

Concetti

Assegnazioni e uguaglianza JScript

Riepilogo dei tipi di dati

Altre risorse

Introduzione al linguaggio JScript

Funzioni JScript