Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 4.0

 

Test Available In FalconJx (+/-)?

ActionScript

JavaScript + Closure annotation

Notes

Global Constants

 

 

 

 

Infinity

+

Infinity

Infinity

 

-Infinity

+

-Infinity

-Infinity

 

NaN

+

NaN

NaN

 

undefined

+

undefined

undefined

 

 

A table showing how each ActionScript language 'feature' is should be translated to Google Closure Tools assisted JavaScript by the FalconJS Compiler.

Using these AS3 references:
- Global Constants, Functions and Classes

- Operators

- Statements, Keywords and Directives

Using Google Closure annotations:

- Annotating JavaScript for the Closure Compiler

Table quick navigation:
- coming soon ;-)

Legend for Javascript column color usage:

Black: JavaScript matches ActionScript

Red: solution not agreed upon

Blue: solution looks good, need consencus to approve (use Comments or Notes column)

Green: solution agreed upon

 

Test Available In FlexJS (+/-)?

ActionScript

JavaScript + Closure annotation

Notes

Global Constants

 

 

 

  Infinity

Global Functions

-  

Infinity   Infinity

 

 

-Infinity

-

-Infinity

-Infinity

 

NaN

-

NaN

NaN

 

undefined

-

undefined

undefined

 

 

 

 

 

 

Global Functions

 

 

 

 

Array()

- +

Array(...values)

Array(...values)

Frank's comment: https://cwiki.apache.org/confluence/display/FLEX/AS+to+JS+translation+table?focusedCommentId=30744800#comment-30744800

 

Boolean()

+ -

Boolean(value)

Boolean(value)

See "Array" function note.  

decodeURI()

+ -

decodeURI(value)

decodeURI(value)

 

decodeURIComponent()

+ -

decodeURIComponent(value)

decodeURIComponent(value)

 

encodeURI()

+ -

encodeURI(value)

encodeURI(value)

 

encodeURIComponent()

+ -

encodeURIComponent(value)

encodeURIComponent(value)

 

escape()

+ -

escape(value)

escape(value)

 

int()

+ -

int(value)

int(value >> 0)
)

See "diff" page...  

isFinite()

+ -

isFinite(value)

isFinite(value)

 

isNaN()

+ -

isNaN(value)

isNaN(value)

 

isXMLName()

+ -

isXMLName(value)

?

There is no matching implementation in JavaScript. We may need to build a utility function to cover this one.

See "E4X" page...

 

Number()

+ -

Number(value)

Number(value)

See "Array" function note.  

Object()

+ -

Object(value)

Object(value)
In ActionScript, calling 'Object(value)' returns 'value' (since all values are objects). Given that, does it make sense to just write 'value' in JavaScript and let the Closure Compiler "cast" it?

 

parseFloat()

+ -

parseFloat(value)

parseFloat(value)

 

parseInt()

+

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="b5dd3584-f745-4f23-b6d4-be1214cdbb24"><ac:plain-text-body><![CDATA[

parseInt()

-

parseInt(value, [radix])

parseInt(value, [radix])

 

]]></ac:plain-text-body></ac:structured-macro>

String()

+

String()

-

String(value)

String(value)

See "Array" function note.  

trace()

+ -

trace(...values)

console.log trace(...values)

We may need a utility function to wrap 'console.log', as not all browsers have debugging enable, and calling to a non-existent 'console' object will cause an error. Maybe something like Jangaroo's 'trace' implementation?

See "diff" page...

uint()

+

uint()

 

uint(value)

uint(value >>> 0)  

See "diff" page...

unescape()

+ -

unescape(value)

unescape(value)

 

Vector()

+ -

result = Vector.<type>(valueArray);

result = /** @type {Array.<type>} */ valueArray;

See "diff" page...

  Let the Closure Compiler handle (check) what is basically a type cast from general Array to a Typed Array.

XML()

+ -

XML(value)

?

See "E4X" page...

  Use 'goog.dom.xml'?

XMLList()

+  

XMLList(value)

?

See "E4X" page... Use 'goog.dom.xml'?


 

 

 

 

 

Classes

 

 

 

 

ArgumentError

- +

ArgumentError

Error

ArgumentError

See "diff" page... Need utility class and cast a regular error object to that, for the sake of the Closure Compiler?

arguments

+ -

arguments

arguments

 

Array

+ -

Array

Array Not sure if all properties and methods of AS Array class map to the JS Array class

See "diff" page...

Boolean

  +

Boolean

Boolean

 

Class

+

-

Code Block
ActionScriptActionScript

package com.example.components
{
public class MyClass
{
    public function MyClass() {}
}
}

Code Block
JavascriptJavascript

goog.provide('com.example.components.MyClass');

/**
 * @constructor
 */
com.example.components.MyClass = function() {};


 

Date

-

Date

Date

The JS class seems to be missing all the properties that the AS class offers. The methods on both classes match, AFAICT.

DefinitionError

-

DefinitionError

Error

Need utility class and cast a regular Error object to that, for the sake of the Closure Compiler?

Error

-

Error

Error

There is no 'errorID' property on the JS Error class

EvalError

-

EvalError

EvalError

Not sure if all JS VM implementations support this...

Function

-

Function

Function

 

int

-

int

Number

 

JSON

-

JSON

JSON

How about support for "older" browsers? Do we provide "if not JSON, add custom JSON to window object"?

Math

-

Math

Math

 

Namespace

-

Namespace

?

Do we need a utility class?

Number

-

Number

Number

 

Object

-

Object

Object

"setPropertyIsEnumerable" not available on JS Object.prototype...

QName

-

QName

?

Part of the E4X implementation in AS... No such beast in JS, so maybe we look at "goog" or even a native utility class?

RangeError

-

RangeError

RangeError

Not sure if all JS VM implementations support this...

ReferenceError

-

ReferenceError

ReferenceError

Not sure if all JS VM implementations support this...

RegExp

-

RegExp

RegExp

Does the regular expression "syntax" of both implementations match?

SecurityError

-

SecurityError

Error

Need utility class and cast a regular Error object to that, for the sake of the Closure Compiler?

String

-

String

String

Not sure if all properties and methods of AS String class map to the JS String class.

SyntaxError

-

SyntaxError

SyntaxError

Not sure if all JS VM implementations support this...

TypeError

-

TypeError

TypeError

Not sure if all JS VM implementations support this...

uint

-

uint

Number

Does the Number object provide all "functionality" of an AS uint? If so, we're good, I think...

URIError

-

URIError

URIError

Not sure if all JS VM implementations support this...

Vector

-

Vector

/** @type {Array.<type>} */ Array

Since a Vector is "nothing more" than a typed Array, we can use Closure annotation to 'force' the Closure Compiler to treat it as such.

VerifyError

-

VerifyError

Error

Need utility class and cast a regular Error object to that, for the sake of the Closure Compiler?

XML

-

XML

?

Part of the E4X implementation in AS... No such beast in JS, so maybe we look at "goog" or even a native utility class?

XMLList

-

XMLList

?

Part of the E4X implementation in AS... No such beast in JS, so maybe we look at "goog" or even a native utility class?

 

 

 

 

 

Arithmetic

 

 

 

 

+

-

+

+

 

--

-

--

--

 

/

-

/

/

 

++

-

++

++

 

-

See "Class" page...

Date

+

Date

Date

See "diff" page...

DefinitionError

+

DefinitionError

DefinitionError

See "diff" page...

Error

+

Error

Error

See "diff" page...

EvalError

+

EvalError

EvalError

See "diff" page...

Function

+

Function

Function

 

int

+

int

int

See "diff" page...

JSON

+

JSON

JSON

See "diff" page...

Math

+

Math

Math

 

Namespace

+

Namespace

Namespace

See "diff" page...

Number

+

Number

Number

 

Object

+

Object

Object

See "diff" page...

QName

+

QName

See "E4X" page...

 

RangeError

+

RangeError

RangeError

See "diff" page...

ReferenceError

+

ReferenceError

ReferenceError

See "diff" page...

RegExp

+

RegExp

RegExp

See "diff" page...

SecurityError

+

SecurityError

SecurityError

See "diff" page...

String

+

String

String

See "diff" page...

SyntaxError

+

SyntaxError

SyntaxError

See "diff" page...

TypeError

+

TypeError

TypeError

See "diff" page...

uint

+

uint

uint

See "diff" page...

URIError

+

URIError

URIError

See "diff" page...

Vector

+

Vector

See "diff" page...

 

VerifyError

+

VerifyError

VerifyError

See "diff" page...

XML

+

XML

See "E4X" page...

 

XMLList

+

XMLList

See "E4X" page...


 

 

 

 

 

Arithmetic

 

 

 

 

+

+

+

+

 

--

+

--

--

 

/

+

/

/

 

++

+

++

++

 

%

+

%

-

%

%

 

*

+ -

*

*

 

- -

+

-

-

 

 

 

 

 

 

Arithmetic compound assignment

 

 

 

 

+=

- +

+=

+=

 

/=

- +

/=

/=

 

%=

- +

%=

%=

 

*=

- +

*=

*=

 

-= -

+

-=

-=

 

 

 

 

 

 

Assignment

 

 

 

 

=

- +

=

=

 

 

 

 

 

 

Bitwise

 

 

 

 

&

- +

&

&

 

<<

+ -

<<

<<

 

~

+ -

~

~

 

|

+ -

|

|

 

>>

+ -

>>

>>

 

>>>

+ -

>>>

>>>

 

^

+ -

^

^

 

 

 

 

 

 

Bitwise compound assignment

 

 

 

 

&=

- +

&=

&=

 

<<=

- +

<<=

<<=

 

|=

- +

|=

|=

 

>>=

- +

>>=

>>=

 

>>>=

- +

>>>=

>>>=

 

^=

- +

^=

^=

 

 

 

 

 

 

Comment

 

 

 

 

/**/

- +

/**/

/**/

 

//

- +

//

//

 

 

 

 

 

 

Comparison

 

 

 

 

==

- +

==

==

 

>

- +

>

>

 

>=

- +

>=

>=

 

!=

- +

!=

!=

 

<

- +

<

<

 

<=

- +

<=

<=

 

===

- +

===

===

 

!==

- +

!==

!==

 

 

 

 

 

 

Logical

 

 

 

 

&&

- +

&&

&&

 

&&=

- +

x &&= y

x = x && y

See "diff" page...

  Excellent suggestion from Fank: Keep It Simple, Stupid ;-)

!

- +

!

!

 

||

- +

||

||

 

||=

- +

x ||= y

x = x || y

See "diff" page...

  KISS, again.

 

 

 

 

 

Other

 

 

 

 

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3f8cb671-b3bb-4bd9-aaad-9ab97b41a0d4"><ac:plain-text-body><![CDATA[

[]

-

[]

[]

 

]]></ac:plain-text-body></ac:structured-macro>

as

-

as

?

I think we need a utility function

,

 

 

 

 

?:

 

 

 

 

delete

 

 

 

 

.

 

 

 

 

in

 

 

 

 

instanceof

 

 

 

 

is

 

 

 

 

::

 

 

 

 

new

 

 

 

 

{}

 

 

 

 

()

 

 

 

 

/

 

 

 

 

:

 

 

 

 

typeof

 

 

 

 

[]

+

[]

[]

 

as

+

as

See "diff" page...

 

,

+

,

,

 

?:

+

(value) ? true : false;

(value) ? true : false;

 

delete

+

delete

delete

 

.

+

.

.

 

in

+

in

in

 

instanceof

+

instanceof

instanceof

See "diff" page...

is

+

is

?


::

+

::

?

 

new

+

new

new

 

{}

+

{}

{}

 

()

+

()

()

 

/

+

/

/

 

:

+

:

See "diff" page...

 

typeof

+

typeof

typeof

See "diff" page...

void

+

void

void

void

 

 

 

 

 

 

 

 

 

String

 

 

 

 

+

  +  

+

  +

 

+=

  +  

+=

  +=

 

"

  +  

"

  "

 

 

 

 

 

 

XML

 

 

 

 

@

-

@

See "E4X" page...


{}

-

 

 

 

 

{}

See "E4X" page...

  

[]

  -

 

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="3d1df593-1f41-45c0-b531-f14a96e41c83"><ac:plain-text-body><![CDATA[

[]

 

 

 

 

]]></ac:plain-text-body></ac:structured-macro>

+

 

 

 

 

+=

 

 

 

 

[]

See "E4X" page...

 

+

-

+

See "E4X" page...


+=

-

+=

See "E4X" page...


delete

-

delete

See "E4X" page...


..

-

..

See "E4X" page...


.

-

.

See "E4X" page...


()

-

()

See "E4X" page...


<>

-

<>

See "E4X" page...

 

 

delete

 

 

 

 

.. Statements

 

 

 

 

. break

  +  

break

  break

 

() case

  +  

case

  case

 

<> continue

  +  

continue

  continue

  

default

  +  

default

  default

 

Statements

 

 

do...while

+

do...while

do...while  

 

break else

  +  

else

  else

 

case for

  +  

for

  for

 

continue

 

 

 

 

default

 

 

 

 

do...while

 

 

 

 

else

 

 

 

 

for

 

 

 

 

for...in

 

 

 

 

for each...in

 

 

 

 

if

 

 

 

 

label

 

 

 

 

return

 

 

 

 

super

 

 

 

 

switch

 

 

 

 

throw

 

 

 

 

for...in

+

for...in

for...in

 

for each...in

+

for each...in

See "diff" page...

 

if

+

if

if

 

label

+

label

label

 

return

+

return

return

 

super

+

super([arg1, ..., argN]);
super.method([arg1, ..., argN]);

See "diff" page... 

 

switch

+

switch

switch

 

throw

+

throw

throw

 

try...catch...finally

+

try...catch...finally

try...catch...finally

 

while

+

while

while

 

with

+

with

with

 

 

 

 

 

 

Attribute Keywords try...catch...finally

 

 

 

 

while dynamic

  +

 

dynamic

See "diff" page...  

 

with final

  +

 

final

See "diff" page...  

  

internal

  +

 

 

 

Attribute Keywords

 

 

 

 

internal

See "diff" page...

 

native

 

[not user accessible] dynamic

 

  

override

  +

final

override

See "diff" page...  

  

private

  +

internal

private

See "diff" page...  

  

protected

  +

native

protected

See "diff" page...  

  

public

  +

override

 

 

 

 

public

See "diff" page...


static

+

static

See "diff" page... private

 

 

 

  protected

 

  

Definition keywords

 

public

 

 

 

 

static

 

 

 

 

 

 

 

 

 

Definition keywords

 

 

 

 

... (rest) parameter

 

 

 

 

class

 

 

 

 

const

 

 

 

 

extends

 

 

 

 

function

 

 

 

 

get

 

 

 

 

implements

 

 

 

 

interface

 

 

 

 

... (rest) parameter

+

...rest

See "diff" page...


class

+

class

See "Class Implementations" page...

 

const

+

const

See "diff" page...

 

extends

+

extends

See "diff" page...

 

function

+

function

function

 

get

+

get

See "diff" page...

 

implements

+

implements

See "diff" page...

 

interface

+

interface

See "diff" page...

 

namespace

+

namespace

See "diff" page...

 

package

+

package

See "diff" page...

 

set

+

set

See "diff" page...

 

var

+

var

var

namespace

 

 

 

 

package

 

 

  

Directives

set

 

 

 

  var

default xml namespace

  -

default xml namespace

See "E4X" page...

 

import

+

import

See "diff" page...

 

 

 

 

 

  

include

  -

Directives

include

See "diff" page...  

  

use namespace

  - default xml namespace

use namespace

See "diff" page...

 

 

 

 

import  

  

Namespaces

 

  include

 

  

AS3

  -

use namespace ?

 

 

 

 

 

 

 

 

 

Namespaces

 

 

 

 

AS3

 

 

 

 

flash_proxy

 

 

 

 

object_proxy

 

 

 

 

 

 

 

 

 

Primary expression keywords

 

 

 

 

false

 

 

 

 

null

 

 

 

 

this

 

 

 

 

true

 

 

 

 

 

 

 

 

 

OLD

 

 

 

 

Inheriting

 

Code Block
ActionScriptActionScript

package com.example.components{
import org.apache.flex.Button;

public class MyClass extends Button
{
	public function MyClass()
	{
		super();
	}
}
}

Code Block
JavascriptJavascript

goog.provide('com.example.components.MyClass');

goog.require('org.apache.flex.Button');

/**
 * @constructor
 * @extends {org.apache.flex.Button}
 */
com.example.components.MyClass = function() {
    goog.base(this);
};
goog.inherits(com.example.components.MyClass, org.apache.flex.Button);

 

?

See "diff" page...

flash_proxy

-

?

?

See "diff" page...

object_proxy

-

?

?

See "diff" page...

 

 

 

 

 

Primary expression keywords

 

 

 

 

false

+

false

false

 

null

+

null

null

 

this

+

this

See "diff" page...

 

true

+

true

true

 

 

Implementing

 

TBD

TBD

 

Inheriting + Implementing

 

TBD

TBD

 

 

 

 

 

 

Fields

 

 

 

 

private

 

Code Block

private var _myVar:String = "";
Inside the constructor function:
Code Block

/**
 * @private
 * @type {string}
 */
this._myVar = '';

 

protected

 

This is how far I got today ;-)

 

 

public

 

 

 

 

Global Constants