2012-02-15 31 views
4

我正在編寫基於ECMA-262的JavaScript解析器。我很想知道我需要改變多少以使它兼容ECMA-357ECMA-262和ECMA-357之間是否有語法差異?

是否有任何語法差異?

+2

可能值得注意的是,就瀏覽器而言,E4X僅被Firefox支持,並且在那裏已被棄用。在這一點上它看起來像死了的技術。 – duskwuff 2012-02-16 22:43:54

+0

@duskwuff:Ouch ...當你說我找到了https://bugzilla.mozilla.org/show_bug.cgi?id=389123#c9 - 看起來它確實已被悄悄棄用。我猜測他們只是隨之而來的,因爲沒有其他瀏覽器供應商在7年內實現它。 – 2012-02-16 23:09:26

回答

3

有許多語法擴展。其中最重要的是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):

[email protected]   // get attribute attr 
xml.*    // get all child elements 
[email protected]*    // 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 
[email protected]::attr  // get attribute with namespace soap 

有是默認的XML名稱空間語句,它在語法上是非常罕見的構造(參見12.1節):

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

Fi應受,有for each .. in環,類似於for .. in(見12.3):

for each (var foo in xml) 
{ 

} 

據我知道這些都是所有的語法差異 - 但你可能已經有了足夠多了。

+0

哇。這是真的嗎?它看起來很糟糕: -/ – copy 2012-02-17 02:29:00

+0

@copy:如果你必須使用XML數據,那麼這比通常的DOM調用好得多(比如:更清晰和更易於閱讀),通常與循環一起獲取零件你感興趣的樹的例子。這裏的例子只是說明了語法上可能的東西,而不是你在真實代碼中做什麼。 – 2012-02-17 12:44:58

相關問題