Assegnazioni e uguaglianza JScript
In JScript, l'operatore di assegnazione viene utilizzato per assegnare un valore a una variabile, mentre l'operatore di uguaglianza viene utilizzato per confrontare due valori.
Assegnazioni
Come in molti linguaggi di programmazione, in JScript il segno di uguale (=) viene impiegato per assegnare valori alle variabili. È infatti l'operatore di assegnazione. L'operando alla sinistra dell'operatore = deve essere un Lvalue, vale a dire una variabile, un elemento di matrice o la proprietà di un oggetto.
L'operando alla destra dell'operatore = deve essere un Rvalue. Un Rvalue può essere un valore arbitrario di qualsiasi tipo, compreso il valore restituito da un'espressione. Di seguito è riportato un esempio di istruzione di assegnazione JScript.
anInteger = 3;
In JScript questa istruzione significa:
"Assegna il valore 3 alla variabile anInteger"
oppure
"il valore assegnato a anInteger è 3".
L'assegnazione verrà sempre eseguita correttamente se la variabile contenuta nella funzione non è stata associata a un tipo particolare di dati mediante annotazione del tipo. In caso contrario, il compilatore tenterà di convertire Lvalue nel tipo di dati di Rvalue. Se la conversione non potrà mai essere eseguita, verrà generato un errore. Se la conversione verrà eseguita per alcuni valori ma non per altri, potrà essere generato un errore al momento dell'esecuzione del codice.
Nell'esempio che segue, un valore integer memorizzato nella variabile i viene convertito in un valore double quando viene assegnato alla variabile x:
var i : int = 29;
var x : double = i;
Per ulteriori informazioni vedere Conversione di tipi.
Uguaglianza
A differenza di altri linguaggi di programmazione di comune utilizzo, in JScript il segno di uguale viene impiegato solo come operatore di assegnazione e non come operatore di confronto. Per confrontare due valori è possibile utilizzare l'operatore di uguaglianza (==) o l'operatore di identità (===).
L'operatore di uguaglianza consente di confrontare stringhe primitive, numeri e valori Boolean in base al valore. Se le due variabili hanno lo stesso valore, l'operatore di uguaglianza restituirà true, dopo avere eventualmente effettuato una conversione del tipo. Gli oggetti quali Array, Function, String, Number, Boolean, Error, Date e RegExp vengono confrontati in base al riferimento. Il confronto tra due variabili di questi tipi aventi lo stesso valore restituirà true solo se fanno riferimento esattamente allo stesso oggetto.
Mediante l'operatore di identità viene confrontato sia il valore che il tipo di due espressioni. Il valore restituito sarà true solo se il valore e il tipo di dati sono gli stessi per i due operandi.
Nota
L'operatore di identità non fa distinzione tra i vari tipi di dati numerici. Assicurarsi di aver compreso correttamente la differenza tra l'operatore di assegnazione, l'operatore di uguaglianza e l'operatore di identità.
Tutti i confronti eseguiti negli script restituiscono sempre un risultato booleano. Si consideri la seguente riga di codice JScript:
y = (x == 2000);
Viene verificato il valore della variabile x per vedere se è uguale al numero 2000. Se lo è, il risultato del confronto sarà il valore Boolean true, assegnato alla variabile y**.** Se invece il valore di x non è uguale a 2000, il risultato del confronto sarà il valore Boolean false, assegnato a y.
L'operatore di uguaglianza eseguirà una conversione di tipo per verificare se i valori sono gli stessi. Nella seguente riga di codice JScript, la stringa letterale "42" verrà convertita in numero prima di essere confrontata con il numero 42. Il risultato sarà true.
42 == "42";
Gli oggetti vengono confrontati in base a diverse regole. Il funzionamento dell'operatore di uguaglianza dipende dal tipo di oggetti. Se gli oggetti sono istanze di una classe definita mediante un operatore di uguaglianza, il valore restituito dipenderà dall'implementazione di tale operatore. In JScript non possono essere definite classi che forniscono un operatore di uguaglianza, per quanto altri linguaggi .NET Framework lo consentano.
Gli oggetti in cui non è definito un operatore di uguaglianza, come quelli basati sull'oggetto Object di JScript o le istanze di classi JScript, vengono considerati uguali solo se fanno riferimento esattamente allo stesso oggetto. Pertanto, due oggetti distinti che contengono gli stessi dati vengono considerati diversi. Questa condizione è illustrata nell'esempio che segue:
// A primitive string.
var string1 = "Hello";
// Two distinct String objects with the same value.
var StringObject1 = new String(string1);
var StringObject2 = new String(string1);
// An object converts to a primitive when
// comparing an object and a primitive.
print(string1 == StringObject1); // Prints true.
// Two distinct objects compare as different.
print(StringObject1 == StringObject2); // Prints false.
// Use the toString() or valueOf() methods to compare object values.
print(StringObject1.valueOf() == StringObject2); // Prints true.
Gli operatori di uguaglianza sono particolarmente utili nelle istruzioni relative a condizioni delle strutture di controllo. In questo caso, viene combinato un operatore di uguaglianza con un'istruzione che lo utilizza. Prendere in considerazione l'esempio di codice JScript riportato di seguito.
if (x == 2000)
z = z + 1;
else
x = x + 1;
L'istruzione if...else in JScript esegue un'operazione (in questo caso, z = z + 1) se il valore di x è 2000 e un'operazione diversa (x = x + 1) se il valore di x non è 2000. Per ulteriori informazioni, vedere Strutture condizionali JScript.
L'operatore di identità (===) esegue la conversione del tipo solo su tipi di dati numerici. Pertanto, l'integer 42 è considerato identico al double 42, ma nessuno dei due è identico alla stringa "42". Nell'esempio di codice JScript seguente viene dimostrato questo comportamento:
var a : int = 42;
var b : double = 42.00;
var c : String = "42";
print(a===b); // Displays "true".
print(a===c); // Displays "false".
print(b===c); // Displays "false".