Condividi tramite


Coercizione in JScript

Aggiornamento: novembre 2007

In JScript è possibile eseguire operazioni su valori di tipi diversi ed essere certi che il compilatore non genererà eccezioni. Il compilatore JScript procederà invece automaticamente all'assegnazione forzata, denominata coercizione, del tipo di dati di un valore a un altro prima di eseguire l'operazione. Negli altri linguaggi, la coercizione è retta da regole più rigide.

Informazioni dettagliate sulla coercizione

Il compilatore consente tutte le coercizioni a meno che non sia provato che la coercizione sia destinata a fallire sempre. Se una coercizione potrebbe avere esito negativo, verrà generato un avviso in fase di compilazione e in molti casi, se la coercizione avrà effettivamente esito negativo, verrà generato un errore di runtime. Di seguito è riportato un esempio:

Operazione

Risultato

Aggiunta di un numero e di una stringa

Al numero viene assegnato forzatamente il tipo String.

Aggiunta di un valore Boolean e di una stringa

Al valore Boolean viene assegnato forzatamente il tipo String.

Aggiunta di un numero e di un valore Boolean

Al valore Boolean viene assegnato forzatamente il tipo Number.

Prendere in considerazione l'esempio riportato di seguito.

var x = 2000;      // A number.
var y = "Hello";   // A string.
x = x + y;         // the number is coerced into a string.
print(x);          // Outputs 2000Hello.

Per convertire esplicitamente una stringa in un valore integer, è possibile utilizzare il metodo parseInt. Per ulteriori informazioni, vedere Metodo parseInt. Per convertire esplicitamente una stringa in un numero, è possibile utilizzare il metodo parseFloat. Per ulteriori informazioni, vedere Metodo parseFloat. Tenere presente che le stringhe vengono convertite automaticamente nei numeri equivalenti solo a scopo di confronto e che rimangono tali per l'addizione (concatenazione).

Poiché adesso JScript è un linguaggio fortemente tipizzato, è disponibile un ulteriore meccanismo di coercizione. Questo utilizza il nome del tipo di destinazione come se fosse una funzione che accetta come argomento l'espressione da convertire. Tale meccanismo è applicabile a tutti i tipi primitivi e di riferimento di JScript e ai tipi di .NET Framework.

Mediante il codice seguente, ad esempio, si ottiene la conversione di un valore integer in un valore Boolean:

var i : int = 23;
var b : Boolean;
b = i;
b = Boolean(i);

Poiché il valore di i è diverso da zero, b è true.

Il nuovo meccanismo di coercizione è applicabile anche a molti tipi definiti dall'utente. Tuttavia, il funzionamento delle coercizioni in cui uno dei tipi sia definito dall'utente non è sempre garantito. In alcuni casi, infatti, lo scopo della conversione di tipi dissimili predisposta dall'utente può venire interpretato erroneamente. Ciò si verifica soprattutto quando il tipo del quale si effettua la conversione è costituito da più valori diversi. Mediante il codice che segue, ad esempio, vengono create due classi (tipi). Una contiene una sola variabile i, che rappresenta un valore di tipo integer. L'altra contiene tre variabili (s, f e d), ognuna di tipo differente. Nell'istruzione finale non è possibile determinare in JScript come convertire la variabile del primo tipo in una del secondo tipo.

class myClass {
   var i : int = 42;
}
class yourClass {
   var s : String = "Hello";
   var f : float = 3.142;
   var d : Date = new Date();
}
// Define a variable of each user-defined type.
var mine : myClass = new myClass();
var yours : yourClass;

// This fails because there is no obvious way to convert
// from myClass to yourClass
yours = yourClass(mine);

Vedere anche

Concetti

Conversione di tipi

Coercizione mediante gli operatori bit per bit

Altre risorse

Funzioni JScript