2010-03-12 22 views
9

Der meiste JavaScript-Code ist auch syntaktisch gültiger ActionScript 3.0-Code. Es gibt jedoch einige Ausnahmen, die mich zu meiner Frage führen:Gültiger JavaScript-Code, der kein gültiger ActionScript 3.0-Code ist?

Welche Konstrukte/Features in JavaScript sind in ActionScript 3.0 syntaktisch ungültig? Bitte geben Sie konkrete Beispiele für JavaScript-Code an (einfacher JavaScript-Code ohne DOM-API-Nutzung), der NICHT ist, gültiger ActionScript 3.0-Code.

+0

javascript 'eval()' Funktion? –

+1

Nicht unmöglich, eval obwohl zu implementieren. http: //eval.hurlant.com/demo – spender

+0

Warum die Abstimmung runter? – knorv

Antwort

8

Sie können eine Variable in JS deklarieren, ohne die var-Anweisung zu verwenden. In ActionScript 3 lautet die var-Anweisung always required.

Die folgende gültige JS ist, aber ein Compiler-Fehler in AS3 werfen:

var foo = 6; 
bar = "bar"; 

Sie können eine Variable in einem einzelnen Bereich JS ohne Fehler neu deklarieren können:

var x = 5; 
var x; 

In AS3, Sie können nur eine Variable einmal für jeden Bereich deklarieren.

2

Actionscript 1 ist viel näher an Javascript. Actionscript 3 folgt der nun nicht mehr existierenden ECMAScript 4 Spezifikation.

6

Die offensichtlichsten sind ECMAScript 4 Schlüsselwörter, die nicht zukünftige reservierte Wörter in ECMAScript 262 3rd Edition waren:

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

Warum die Abstimmung runter? +1 von mir! – knorv

+0

@knorv: Ich habe mich dummerweise über die downvotes beschwert, die alle auf meta.stackoverflow.com erhalten haben. Die Leute dort dachten offensichtlich, dass es sehr aufwändig wäre, meine Antwort noch mehr zu verwerfen. –

+0

Andy E: OK, das erklärt es. Ich hoffe, Ihre Antwort wird aufgewertet, da es eine gute Antwort ist. – knorv

2

Für eine Sache, die eval() Methode funktioniert nicht.

Auch der RegExp() - Konstruktor scheint nicht zu funktionieren, zumindest nicht mit Zeichenfolgen. Mit anderen Worten, kann man nicht sagen:

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

Sie haben es so schreiben:

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

Mit anderen Worten, Sie nicht Variablensubstitution für Teile des String-Argument tun.

+1

Die Dokumente schlagen vor, dass Sie Zeichenfolgen für Argumente zu dem 'RegExp'-Konstruktor verwenden können, es macht keinen Sinn, nicht - es würde keinen Vorteil geben, den Konstruktor zu verwenden, wenn Sie nur übergeben ein Literal sowieso. Link: http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/RegExp.html –

+0

@AndyE: Ja, ich weiß, dass es keinen Sinn ergibt. Ich melde nur, dass es für mich nicht funktioniert hat und vor kurzem. – Robusto

+0

Beide Versionen des bereitgestellten Codes kompilieren und funktionieren in Flash CS4 einwandfrei. – fenomas

2

Nun, Sie können nicht alert (und einige andere JS globale Funktionen), onmouseover, onload, etc. (JS-Event-Handler), alles, was formularbezogen oder Browser-bezogen ist (wie Sie vorschlagen). Sie können JS-Code nicht kopieren und in eine AS3-Klasse einfügen, da AS3 stark typisiert ist und Sie Compiler-Fehler bekommen können (außerdem haben Sie in JS überhaupt keine Klassen).

4

AS3 ist eine viel stärker typisierte und traditionell OO, Sprache als Javascript (und AS2), so dass alle Manipulation von Prototypen aus ist. Dies ist wahrscheinlich der größte Unterschied, IMO, da es bedeutet, dass so etwas wie jQuery nicht wirklich in AS3 funktionieren kann.

Wie bereits erwähnt, müssen Einheimische mit var deklariert werden. Nicht typisierte Variablen und neu deklarierte Variablen generieren auch Compiler-Warnungen.

Sie werden im Allgemeinen feststellen, dass es mehr Beispiele gibt (umgekehrt ist der AS3-Code in Javascript nicht gültig).

Verwandte Themen