...
| 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 | - |
|
|
| ||||||||||||||
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 |
|
|
|
| ||||||||||||||
Implementing |
| TBD | TBD |
| ||||||||||||||
Inheriting + Implementing |
| TBD | TBD |
| ||||||||||||||
|
|
|
|
| ||||||||||||||
Fields |
|
|
|
| ||||||||||||||
private |
|
| Inside the constructor function:
|
| ||||||||||||||
protected |
| This is how far I got today ;-) |
|
| ||||||||||||||
public |
|
|
|
| ||||||||||||||
Global Constants |
|
|
|
|