@Perks my thoughts exactly
It all depends what u are using it for, what ur needs are etc.
The OO problem is a biggie, for a person with a background in delphi/C++ OO in JS appears not to be OO.
But JS OO is OO

But yah a very valid point.
For example window.location is same as window["location"]
(i am not JS object expert, but there is like a ton of ways to access object properties)
I used a variant of the rhino parser when i scan for all the xss which i posted elsewhere.
Problem with rhino is that it slow, and also it is not thread safe (in a really nasty way)

So u can not get the speed, if u just need to uses it for a few requests then it works good.
That is reason I would go with spidermonkey interpretor, and make module for PHP.
Speed is one of the reasons i dumped using perl as my system and switched to lisp.
In lisp u have
http://opensource.franz.com/xmlutils/xmlutils-dist/phtml.htm which basically takes html like this
"<HTML>
<HEAD>
<TITLE>Example HTML input</TITLE>
<BODY>
<P>Here is some text with a <B>bold</B> word<br>and a <A HREF=\"help.html\">link</P>
</HTML>
and it turns it into this
((:html (:head (:title "Example HTML input"))
(:body (:p "Here is some text with a " (:b "bold") " word" :br "and a "
((:a :href "help.html") "link")))))
which is a lisp list (of sorts

)
Since lisp compiles directly to machine code it is blindingly fast (ussually 2x the speed of C, compared to scripting language at 10x)
Also since the list is basic structure of lisp, i can now walk the lisp html generated list.
I am using SBCL (lisp has many different types of distros) which allows direct memory access.
As a result all of my http functions are built ontop of libcurl which is all written in C, but since i can access memory directly I do not have the speed loss accrued that a scripting language will suffer from.
Also since the html is now a list (what is called LHTML, idea of html was stolen from lisp, except they replaced ( with < and kinda fuked it up) if i decided to embedd a JS interpretor, when it needs to modify the dom, it would just modify the lhtml instead.
(Before i start working on system, i planned that in future i may want to do this)
(basically right now i have a lisp clone of perl mechanize, except built with lisp ontop of libcurl)
Lisp is kinda like matlab as in u have a console and u compile shit.
Also more cool is u can deploy lisp onto a vps/server.
Then u can connect to it remotely using a secure socket, with emacs.
If lisp encounters an error it will catch it.
Without restarting the lisp, i can locate the cause of error, then recompile that function. And away i go again.
That is why extreme programming in other languages is just nothing but hype/jargon while in lisp it really is

Anyway i have digressed.
If i am serious about proper html parsing.
I probably will rip the parser out of mozilla, except instead of having it generate a DOM tree have it generate lhtml.
Then at same time do same thing with spidermonkey JS engine.
That way i will be able to emulate browser 100%.