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

时间:2012-02-15 00:42:59

标签: javascript parsing e4x ecma262

我正在编写基于ECMA-262的JavaScript解析器。我有兴趣知道我需要更改多少以使其ECMA-357兼容。

是否有任何语法差异?

1 个答案:

答案 0 :(得分: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)
{

}

据我所知,这些都是语法差异 - 但你可能已经绰绰有余了。