Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

 

Test Available In FlexJS (+/-)?

ActionScript

JavaScript + Closure annotation

Notes

Global Constants

 

 

 

 

Infinity

-

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)

(value >> 0)

 

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.

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)

 

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="8981abdfc37e643f-0fa47684-4d61427c-b25ea689-ffab039de8fa95ee73d4a6c4"><ac:plain-text-body><![CDATA[

parseInt()

-

parseInt(value, [radix])

parseInt(value, [radix])

 

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

String()

-

String(value)

String(value)

See "Array" function note.

trace()

-

trace(...values)

console.log(...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?

uint()

 

uint(value)

(value >>> 0)

 

unescape()

-

unescape(value)

unescape(value)

 

Vector()

-

result = Vector.<type>(valueArray);

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

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

XML()

-

XML(value)

?

Use 'goog.dom.xml'?

XMLList()

 

XMLList(value)

?

Use 'goog.dom.xml'?

 

 

 

 

 

Classes

 

 

 

 

ArgumentError

-

ArgumentError

Error

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.

Boolean

 

Boolean

Boolean

 

Class

-

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

Code Block
Javascript
Javascript
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

 

 

 

 

+

-

+

+

 

--

-

--

--

 

/

-

/

/

 

++

-

++

++

 

%

-

%

%

 

*

-

*

*

 

-

-

-

-

 

 

 

 

 

 

Arithmetic compound assignment

 

 

 

 

+=

-

+=

+=

 

/=

-

/=

/=

 

%=

-

%=

%=

 

*=

-

*=

*=

 

-=

-

-=

-=

 

 

 

 

 

 

Assignment

 

 

 

 

=

-

=

=

 

 

 

 

 

 

Bitwise

 

 

 

 

&

-

&

&

 

<<

-

<<

<<

 

~

-

~

~

 

|

-

|

|

 

>>

-

>>

>>

 

>>>

-

>>>

>>>

 

^

-

^

^

 

 

 

 

 

 

Bitwise compound assignment

 

 

 

 

&=

-

&=

&=

 

<<=

-

<<=

<<=

 

|=

-

|=

|=

 

>>=

-

>>=

>>=

 

>>>=

-

>>>=

>>>=

 

^=

-

^=

^=

 

 

 

 

 

 

Comment

 

 

 

 

/**/

-

/**/

/**/

 

//

-

//

//

 

 

 

 

 

 

Comparison

 

 

 

 

==

-

==

==

 

>

-

>

>

 

>=

-

>=

>=

 

!=

-

!=

!=

 

<

-

<

<

 

<=

-

<=

<=

 

===

-

===

===

 

!==

-

!==

!==

 

 

 

 

 

 

Logical

 

 

 

 

&&

-

&&

&&

 

&&=

-

x &&= y

x = x && y

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

!

-

!

!

 

||

-

||

||

 

||=

-

x ||= y

x = x || y

KISS, again.

 

 

 

 

 

Other

 

 

 

 

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="1e820826698252b9-3d378d2d-44af469a-be378549-dfb8a599740b885ee9901012"><ac:plain-text-body><![CDATA[

[]

-

[]

[]

 

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

as

-

as

?

I think we need a utility function

,

  -  

,

  ,

 

?:

 

 

-

(value) ? true : false;

(value) ? true : false; 

 

delete

  -  

delete

  delete

 

.

  -  

.

  .

 

in

  -  

in

  in

 

instanceof

  -  

instanceof

 

instanceof

We need to check the "goog" way of inheritance for correctness of the JS 'instanceof' and see if the Closure annotation method for implementing "Interfaces" covers the functionality of AS 'instanceof'. 

is

  -  

is

 

?

I think we need a utility function 

::

  -  

::

 ?

 

new

  -  

new

  new

 

{}

  -  

{}

  {}

 

()

  -  

()

  ()

 

/

  -  

/

 

/

Is the regular expression syntax the same between the two (AS and JS) implementations?  

:

  -

 

 

 

:

multiple solutions, context dependent

To "strongly" type JS, we use the Google Closure annotations. These are JSDoc block that go with function or variable declarations and give the Closure Compiler hints as to the type of variables, arguments and return values.

typeof

-

typeof

typeof

Only the "xml" type is not supported on the JS side (nor are the data types that go with it, XML and XMLList)

void

-

void

void

Note: this applies to 'void' as an operator, not the "data type" typeof

 

 

 

  void

  

String

 

 

 

  

+

  -  

+

String +

  

+=

  -  

+=

+=

  

"

  -  

"

+= "

 

 

 

 

"  

 

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?

{}

-

@

 

 

 

 

{}

 

 

 

?

See '@' above, and: these are the same as used in AS object literals, Mike: can you make the distinction?  

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="134c6604-aea0-490c-a8e1-4f0548352ecf"><ac"80b5c0b4-6a37-4568-8b4c-497e933de3b2"><ac:plain-text-body><![CDATA[

[]

-

[]

?

See '@' above, and: these are the same as used in AS array literals, Mike: can you make the distinction?

]]></ac:plain-text-body><![CDATA[

[]

 

 

 

 

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

+

 

 

 

 

+=

 

 

 

 

delete

 

 

 

 

..

 

 

 

 

.

 

 

 

 

()

 

 

 

 

/ac:structured-macro>

+

-

+

?

See '@' above, and: this is the same as used the AS concatenation operator: Mike, can you make the distinction?

+=

-

+=

?

See '@' above, and: this is the same as used the AS concatenation operator: Mike, can you make the destinction?

delete

-

delete

?

See '@' above, and: this is the same as used the AS delete operator: Mike, can you make the distinction?

..

-

..

?

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

.

-

.

?

See '@' above, and: this is the same as used the AS access operator: Mike, can you make the distinction?

()

-

()

?

See '@' above, and: this is the same as used the AS grouping operator: Mike, can you make the destinction?

<>

-

<>

?

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

<>

 

 

 

 

 

 

 

 

 

Statements

 

 

 

 

break

 

 

 

 

case

 

 

 

 

continue

 

 

 

 

default

 

 

 

 

do...while

 

 

 

 

else

 

 

 

 

for

 

 

 

 

for...in

 

 

 

 

for each...in

 

 

 

 

if

 

 

 

 

label

 

 

 

 

return

 

 

 

 

super

 

 

 

 

switch

 

 

 

 

throw

 

 

 

 

try...catch...finally

 

 

 

 

while

 

 

 

 

with

 

 

 

 

 

 

 

 

 

Attribute Keywords

 

 

 

 

dynamic

 

 

 

 

final

 

 

 

 

internal

 

 

 

 

native

 

 

 

 

override

 

 

 

 

private

 

 

 

 

protected

 

 

 

 

public

 

 

 

 

static

 

 

 

 

 

 

 

 

 

Definition keywords

 

 

 

 

... (rest) parameter

 

 

 

 

class

 

 

 

 

const

 

 

 

 

extends

 

 

 

 

function

 

 

 

 

get

 

 

 

 

implements

 

 

 

 

interface

 

 

 

 

namespace

 

 

 

 

package

 

 

 

 

set

 

 

 

 

var

 

 

 

 

 

 

 

 

 

Directives

 

 

 

 

default xml namespace

 

 

 

 

import

 

 

 

 

include

 

 

 

 

use namespace

 

 

 

 

 

 

 

 

 

Namespaces

 

 

 

 

AS3

 

 

 

 

flash_proxy

 

 

 

 

object_proxy

 

 

 

 

 

 

 

 

 

Primary expression keywords

 

 

 

 

false

 

 

 

 

null

 

 

 

 

this

 

 

 

 

true

 

 

 

 

 

 

 

 

 

OLD

 

 

 

 

Inheriting

 

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

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

Code Block
Javascript
Javascript
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);

 

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