ECMA-262和ECMA-357之间是否存在语法差异?

4
我正在编写一个基于ECMA-262的JavaScript解析器。我很想知道为了让它兼容ECMA-357,需要做多少改动。
是否存在语法差异?

2
值得注意的是,就浏览器而言,E4X 只被 Firefox 支持,并且在那里已经被弃用。目前看来,它已经成为了过时的技术。 - user149341
@duskwuff:哎呀……在你提到之后,我发现 https://bugzilla.mozilla.org/show_bug.cgi?id=389123#c9 - 看起来它确实已经被悄悄弃用了。我想他们只是在考虑到其他浏览器厂商七年内没有实现它的情况下做出了这个决定。 - Wladimir Palant
1个回答

2

有很多语法扩展。其中最重要的是XML字面量(参见第11.1.4节和11.1.5节):

var foo = <xml>
  foo
</xml>;
var bar = <>
  <tag attr={(1+2).toFixed(2)}/>
  {foo}
</>;

上面的示例展示了XML代码中空根标签和JavaScript表达式的特殊情况。

你还有一些在ECMA-262中无效的表达式(参见第11.2节):

xml.@attr           // get attribute attr
xml.*               // get all child elements
xml.@*              // get all attributes
xml..foo            // get all <foo> tags
xml..foo.(@id == 1) // filter <foo> tags by id attribute

这里有命名空间(见11.1.2节):

xml.soap::foo       // get <foo> child tags with namespace soap
xml.@soap::attr     // get attribute with namespace soap

有一个默认的XML命名空间声明,语法上是非常不寻常的结构(见第12.1节):

default xml namespace = new Namespace("http://foo/bar");

最后,还有一种类似于for..in的循环叫做for each...in循环(见12.3节):

for each (var foo in xml)
{

}

据我所知,以下是所有的语法差异 - 但你可能已经有足够的了。

哇,这是真的吗?它看起来太糟糕了 :-/ - copy
如果你需要处理XML数据,那么这种方法比通常的DOM调用要好得多(更加清晰易读),因为它经常与循环结合使用来获取你感兴趣的树的部分。这里的示例仅说明了在语法上可能实现的内容,而不是你在实际代码中会做的事情。 - Wladimir Palant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接