有效的JavaScript代码不是有效的ActionScript 3.0代码?

有效的JavaScript代码不是有效的ActionScript 3.0代码?,javascript,apache-flex,flash,actionscript-3,actionscript,Javascript,Apache Flex,Flash,Actionscript 3,Actionscript,大多数JavaScript代码在语法上也是有效的ActionScript 3.0代码。但是,有一些例外情况导致我提出了我的问题: JavaScript中的哪些结构/功能在ActionScript 3.0中语法上无效?请提供JavaScript代码(不使用DOM API的基本JavaScript代码)的具体示例,这些代码不是有效的ActionScript 3.0代码。ActionScript 1更接近JavaScript。Actionscript 3遵循现已失效的规范。最明显的是ECMAScrip

大多数JavaScript代码在语法上也是有效的ActionScript 3.0代码。但是,有一些例外情况导致我提出了我的问题:


JavaScript中的哪些结构/功能在ActionScript 3.0中语法上无效?请提供JavaScript代码(不使用DOM API的基本JavaScript代码)的具体示例,这些代码不是有效的ActionScript 3.0代码。

ActionScript 1更接近JavaScript。Actionscript 3遵循现已失效的规范。

最明显的是ECMAScript 4关键字,它们不是ECMAScript 262第3版中未来的保留字:

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

首先,eval()方法不起作用

此外,RegExp()构造函数似乎不起作用,至少在字符串中不起作用。换句话说,你不能说:

var rex:RegExp = new RegExp("[a-zA-Z0-9]+","gim");
你必须这样写:

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

换句话说,您不能对字符串参数的某些部分进行变量替换。

嗯,您不能使用alert(以及其他一些JS全局函数)、onmouseover、onload等(JS事件处理程序),以及任何与表单相关或与浏览器相关的(如您所建议的)。您不能在AS3类中复制和粘贴JS代码,因为AS3是强类型的,并且可能会出现编译器错误(此外,在JS中根本没有类)

您可以在JS中声明变量,而无需使用
var
语句。在ActionScript 3中,
var
语句为

以下是有效的JS,但将在AS3中引发编译器错误:

var foo = 6;
bar = "bar";
您还可以在单个作用域JS中重新声明变量,而不会出现错误:

var x = 5;
var x;

在AS3中,每个作用域只能声明一次变量。

AS3是一种比javascript(和AS2)强得多的类型化语言,传统上是面向对象的语言,因此所有原型操作都不需要。这可能是最大的区别,IMO,因为这意味着像jQuery这样的东西在AS3中无法真正工作

正如所指出的,必须使用
var
声明局部变量。此外,未类型化变量和重新声明的变量会生成编译器警告


您通常会发现有更多其他方法的示例(AS3代码在javascript中无效)。

javascript
eval()
function?但实现eval并非不可能。有人也否决了所有回答这个问题的人,我们都得了a-1+不管怎样,我认为这是一个非常好的问题。。给它赏金很奇怪,但每个人都有自己的。不值得向下投票…文档建议您可以使用字符串作为
RegExp
构造函数的参数,不这样做没有意义-如果您只是传递一个文本,那么使用构造函数没有任何好处。链接:@AndyE:是的,我知道这没有意义。我只是报告说它不适合我,而且是最近发布的。这两个版本的代码在Flash CS4中都可以编译并正常工作。@Fenomas:我使用FlexBuilder 3,它会给我错误。所以你降低了我的答案的排名?@Robusto-这两行代码在sdk3下对我来说都很好。1@knorv当前位置我愚蠢地抱怨每个人在meta.stackoverflow.com上收到的反对票。那里的人显然认为,如果再否决我的答案,那就太自私了。希望你的答案会被提升,因为这是一个好答案。