Coerção de JScript
JScript pode executar operações em valores de tipos diferentes sem que o compilador ao gerar uma exceção. Em vez disso, o compilador JScript altera automaticamente (converte) tipos de um dos dados para que a do outro antes de executar a operação. Outros idiomas têm muito mais estritas regras que regem a coerção.
Detalhes de coerção
O compilador permite a todos os coercions, a menos que ele pode provar que a coerção sempre falhará. Qualquer coerção que pode falha gera um aviso em tempo de compilação e muitos produzem um erro em tempo de execução se a coerção falhar. Por exemplo:
Operation |
Resultado |
---|---|
Adicionar um número e uma seqüência de caracteres. |
O número é forçado em uma seqüência de caracteres. |
Adicionar um valor booleano e uma seqüência de caracteres. |
O Boolean é forçado em uma seqüência de caracteres. |
Adicionar um número e um valor booleano |
O Boolean é forçado em um número. |
Considere o exemplo a seguir:
var x = 2000; // A number.
var y = "Hello"; // A string.
x = x + y; // the number is coerced into a string.
print(x); // Outputs 2000Hello.
Para explicitamente converter uma seqüência de caracteres para um inteiro, você pode usar o parseInt método. Para obter mais informações, consulte o parseInt o método. Para explicitamente converter uma seqüência de caracteres em um número, você pode usar o parseFloat método. Para obter mais informações, consulte o parseFloat o método. Observe que as seqüências são automaticamente convertidas em números equivalentes para fins de comparação, mas são deixadas como seqüências de adição (concatenação).
Como JScript também é uma linguagem com rigidez de tipos, outro mecanismo de coerção está disponível. O novo mecanismo usa o nome do tipo de destino, como se fosse uma função que aceite a expressão a ser convertida como um argumento. Isso funciona para todos os JScript tipos primitivos, tipos de referência de JScript, e.Tipos de NET Framework.
Por exemplo, o código a seguir converte um valor inteiro em um booleano:
var i : int = 23;
var b : Boolean;
b = i;
b = Boolean(i);
Porque o valor de i é um valor diferente de zero, b é true.
O novo mecanismo de coerção também funciona com muitos tipos definidos pelo usuário. No entanto, alguns coercions ou para tipos definidos pelo usuário podem não funcionar porque a JScript pode interpretar incorretamente os intenção do usuário durante a conversão de tipos diferentes. Isso é particularmente verdadeiro quando o tipo que é convertido de é composto de vários valores. Por exemplo, o código a seguir cria duas classes (tipos). Um contém uma única variável i ou seja um inteiro. A outra contém três variáveis (s, f, e d), cada um de um tipo diferente. Na declaração final, é impossível para o JScript determinar como converter uma variável do tipo primeiro para o segundo 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);
Consulte também
Conceitos
Coerção de operadores bit a bit