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 に答える