4

我正在编写一个基于ECMA-262的 JavaScript 解析器。我很想知道我需要进行多少更改才能使其与ECMA-357兼容。

有任何语法差异吗?

4

1 回答 1

3

有许多语法扩展。最重要的是 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 each .. in类似于for .. in(见第 12.3 节)的循环:

for each (var foo in xml)
{

}

据我所知,这些都是语法上的差异——但你可能已经得到了足够多的东西。

于 2012-02-16T22:36:05.560 回答