Есть ли какие-либо синтаксические различия между ECMA-262 и ECMA-357? - PullRequest
4 голосов
/ 15 февраля 2012

Я пишу парсер JavaScript на основе ECMA-262 . Мне было бы интересно узнать, сколько мне нужно изменить, чтобы сделать его ECMA-357 совместимым.

Есть ли синтаксические различия?

1 Ответ

3 голосов
/ 17 февраля 2012

Существует несколько расширений синтаксиса.Наиболее важными являются литералы XML (см. Разделы 11.1.4 и 11.1.5):

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

В приведенном выше примере показан особый случай пустого корневого тега и выражений JavaScript в коде XML.

У вас также есть некоторые выражения, которые недопустимы в 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)
{

}

Насколько я знаю, это все синтаксические различия - но вы, вероятно, уже получили более чем достаточно.

...