2010-03-12 17 views
9

La mayoría del código de JavaScript también es sintácticamente válido Código de ActionScript 3.0. Sin embargo, hay algunas excepciones que me llevan a mi pregunta:Código JavaScript válido que NO es código válido de ActionScript 3.0?

¿Qué construcciones/características en JavaScript son sintácticamente inválidas en ActionScript 3.0? Proporcione ejemplos concretos de código JavaScript (código JavaScript básico sin DOM API usage) que es NOT código válido de ActionScript 3.0.

+0

javascript 'eval()' function? –

+1

Aunque no es imposible implementar la evaluación. http: //eval.hurlant.com/demo – spender

+0

¿Por qué votar abajo? – knorv

Respuesta

8

Puede declarar una variable en JS sin utilizar la instrucción var. En ActionScript 3, la declaración var es always required.

El siguiente es JS válidos pero arrojará un error de compilación en AS3:

var foo = 6; 
bar = "bar"; 

También puede redeclare una variable en un solo ámbito JS sin un error:

var x = 5; 
var x; 

En AS3, solo puede declarar una variable una vez para cada alcance.

2

Actionscript 1 está mucho más cerca de Javascript. Actionscript 3 sigue la ahora difunta ECMAScript 4 espec.

6

Los más obvios son ECMAScript 4 palabras clave que no eran futura palabras reservadas en ECMAScript 262 3ª Edición:

// oops! 
var let = "Hello"; 
var yield = "World"; 
+0

¿Por qué el voto abajo? +1 de mi parte – knorv

+0

@knorv: tontamente me quejé de los votos negativos que todos recibieron en meta.stackoverflow.com. La gente de allí obviamente pensó que sería divertido desestimar aún más mi respuesta. –

+0

Andy E: OK, eso lo explica. Espero que tu respuesta sea votada, ya que es una buena respuesta. – knorv

2

Por un lado, el método eval() no funcionará.

Además, el constructor RegExp() no parece funcionar, al menos no con cadenas. En otras palabras, no se puede decir:

var rex:RegExp = new RegExp("[a-zA-Z0-9]+","gim"); 

usted tiene que escribir así:

var rex:RegExp = new RegExp(/[a-zA-Z0-9]+/gim); 

En otras palabras, no se puede hacer la sustitución de variables para las partes del argumento de cadena.

+1

Los documentos sugieren que puede usar cadenas para argumentos en el constructor 'RegExp', no tiene sentido que no lo haga - no habría beneficio si utiliza el constructor si solo está pasando un literal de todos modos. Enlace: http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/RegExp.html –

+0

@AndyE: Sí, sé que no tiene sentido. Solo estoy informando que no funcionó para mí, y bastante recientemente. – Robusto

+0

Ambas versiones del código publicado se compilan y funcionan bien en Flash CS4. – fenomas

2

Bueno, no puede usar alertas (y algunas otras funciones globales JS), onmouseover, onload, etc. (controladores de eventos JS), todo lo relacionado con el formulario o relacionado con el navegador (como usted sugiere). No puede copiar y pegar código JS en una clase AS3 porque AS3 está fuertemente tipado y puede obtener errores de compilación (además, en JS no tiene clases).

4

AS3 es un lenguaje mucho más fuerte y tradicionalmente OO, que javascript (y AS2), por lo que toda la manipulación de prototipos está fuera. Esta es probablemente la mayor diferencia, IMO, ya que significa que algo como jQuery realmente no puede funcionar en AS3.

Como se señaló, los locales deben declararse con var. Además, las variables sin tipo y las variables redeclaradas generan advertencias del compilador.

En general, encontrará que hay más ejemplos al revés (el código AS3 no es válido en javascript).

Cuestiones relacionadas