Compartir a través de


Actualizar aplicaciones creadas en versiones anteriores de JScript

La mayor parte del código de JScript existente funcionará sin problemas con las mejoras incluidas en JScript 10.0 porque JScript 10.0 es casi totalmente compatible con las versiones anteriores. Las nuevas características de JScript 10.0 abarcan nuevas áreas.

De manera predeterminada, los programas de JScript 10.0 se compilan en modo rápido. Puesto que el modo rápido restringe en cierta medida los tipos de código permitidos, los programas pueden ser más eficaces y ejecutarse más rápidamente. Sin embargo, algunas características disponibles en versiones anteriores no están disponibles en modo rápido. En su mayoría, estas características no eran compatibles con las aplicaciones de múltiples subprocesos y generaban un código poco eficaz. Para los programas compilados con el compilador de la línea de comandos, puede desactivar el modo rápido y obtener una compatibilidad total con las versiones anteriores. Observe que el código compilado de este modo es más lento y más susceptible a errores. El modo rápido no se puede desactivar en las aplicaciones de ASP.NET porque se producirían problemas de estabilidad. Para obtener más información, vea /fast.

Modo rápido

En modo rápido, se desencadenan los siguientes comportamientos de JScript:

  • Es preciso declarar todas las variables.

  • Las funciones se convierten en constantes.

  • Los objetos intrínsecos no pueden tener propiedades expando.

  • No se pueden enumerar ni cambiar las propiedades de los objetos intrínsecos.

  • El objeto arguments no está disponible.

  • No se puede asignar a un método, un campo o una variable de sólo lectura.

  • El método eval no puede definir identificadores en el ámbito que lo contiene.

Es preciso declarar todas las variables

Las versiones anteriores de JScript no requerían la declaración explícita de variables. Si bien está característica hace que los programadores tengan que escribir menos caracteres, dificulta el seguimiento de los errores. Por ejemplo, se puede asignar un valor a un nombre de variable mal escrito, lo que no generaría un error ni devolvería el resultado deseado. Además, las variables no declaradas tienen un ámbito global, lo que puede originar más confusión.

El modo rápido requiere declaraciones explícitas de variables. Esto ayuda a evitar los tipos de error anteriormente mencionados y genera código que se ejecuta con mayor rapidez.

JScript .NET también admite variables con anotación de tipo. Esto enlaza cada variable con un tipo de datos concreto y la variable puede guardar sólo datos de ese tipo. Aunque la anotación de tipos no es necesaria, su uso ayuda a evitar errores asociados con el almacenamiento accidental de datos erróneos en una variable y puede aumentar la velocidad de ejecución del programa.

Para obtener más información, vea Variables y constantes de JScript.

Las funciones se convierten en constantes

En versiones anteriores de JScript, las funciones declaradas con la instrucción function se trataban igual que las variables que contenían un objeto Function. En concreto, se podía utilizar cualquier identificador de función como variable para guardar cualquier tipo de datos.

En modo rápido, las funciones se convierten en constantes. En consecuencia, a las funciones no se les pueden asignar nuevos valores ni se pueden redefinir. De esta manera, se impide que se cambie accidentalmente el significado de una función.

Si el script requiere un cambio de función, puede usar de manera explícita una variable para que contenga una instancia del objeto Function. Observe, sin embargo, que los objetos Function son lentos. Para obtener más información, vea Function (Objeto).

Los objetos intrínsecos no pueden tener propiedades expando

En versiones anteriores de JScript, se podían agregar propiedades expando a los objetos intrínsecos. Este comportamiento se podía utilizar para agregar un método a un objeto String, por ejemplo, con el fin de quitarle espacios iniciales a la cadena.

Esto no está permitido en el modo rápido. Si el script depende de esta característica, deberá modificarlo. Puede definir funciones en el ámbito global en lugar de asociar dichas funciones como métodos a los objetos. A continuación, vuelva a escribir cada instancia en el script en que se llama a un método expando desde el objeto para que el objeto pase a la función adecuada.

Una excepción significativa a esta regla es el objeto Global, que puede seguir teniendo propiedades expando. Todos los identificadores del ámbito global son en realidad propiedades del objeto Global. Naturalmente, el objeto Global tiene que ser extensible dinámicamente para admitir la adición de nuevas variables globales.

No se pueden enumerar ni cambiar las propiedades de los objetos intrínsecos

En las versiones anteriores de JScript, se podía eliminar o enumerar las propiedades predefinidas de los objetos intrínsecos o incluso o escribir en ellas. Este comportamiento podía utilizarse para cambiar, por ejemplo, el método toString predeterminado del objeto Date.

Esto no está permitido en el modo rápido. Esta característica ya no es necesaria, puesto que los objetos intrínsecos no pueden tener propiedades expando y las propiedades de cada objeto se enumeran en la sección de referencia. Para obtener más información, vea Objetos.

El objeto arguments no está disponible

Las versiones anteriores de JScript proporcionaban un objeto arguments dentro de las definiciones de función, que permitía que las funciones aceptaran un número arbitrario de argumentos. El objeto arguments facilitaba también una referencia a la función actual y a la función de llamada.

El objeto arguments no está disponible en modo rápido. Sin embargo, JScript 10.0 permite que las declaraciones de función especifiquen una matriz de parámetros en la lista de parámetros de funciones. Esto permite que la función acepte un número arbitrario de argumentos, con lo que reemplaza parte de la funcionalidad del objeto arguments. Para obtener más información, vea function (Instrucción).

No hay ninguna forma de tener acceso ni hacer referencia directamente a la función actual o a la función de llamada en el modo rápido.

No se puede asignar a un método, un campo o una variable de sólo lectura

En las versiones anteriores de JScript, parecía que las instrucciones podían asignar un valor a un identificador de sólo lectura. La asignación producía un error que podía pasar desapercibido y la única forma de detectar el error de la asignación era comprobar si el valor había cambiado realmente. La asignación de valores a los identificadores de sólo lectura se hace normalmente por error, ya que no surte ningún efecto.

En modo rápido, se genera un error de tiempo de compilación si se trata de asignar un valor a un identificador de sólo lectura. Puede quitar la asignación o tratar de asignar un valor a un identificador que no sea de sólo lectura.

Si desactiva el modo rápido, las asignaciones a identificadores de sólo lectura producirán errores que no se perciben en tiempo de ejecución, pero en tiempo de compilación aparecerá una advertencia.

El método eval no puede definir identificadores en el ámbito que lo contiene

En las versiones anteriores de JScript, las funciones y variables se podían definir en el ámbito local o global mediante una llamada al método eval.

En modo rápido, las funciones y variables se pueden definir en una llamada al método eval, pero son accesibles desde esa llamada concreta. Una vez que termina el método eval, las funciones y variables definidas en el método eval ya no están accesibles. El resultado de un cálculo realizado dentro de un método eval se puede asignar a cualquier variable que esté accesible en el ámbito actual. Las llamadas al método eval son lentas y se recomienda volver a escribir el código que las contenga.

El comportamiento anterior del método eval se restaura si se desactiva el modo rápido.

Vea también

Referencia

/fast

Conceptos

Introducción a JScript 10.0 para programadores de JScript

Otros recursos

Introducción a JScript