<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#ffffff">
Le 25/04/2010 00:39, J Z a écrit : <br>
<blockquote
 cite="mid:p2t651a15de1004250039odb292d43y9c58155aaed018a8@mail.gmail.com"
 type="cite">
  <div class="gmail_quote">
  <blockquote class="gmail_quote"
 style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
    <div text="#000000" bgcolor="#ffffff"><br>
I have thought a lot about weirdnesses that people could think about
like trying to assign a value to the HTMLCollection (divs[14] =
myOtherDiv), but once again, it wouldn't be more allowed than it
currently is (I have no idea of what happens today, but if an error is
thrown in a for-loop, it should throw an error as well in a call within
a forEach).<br>
    </div>
  </blockquote>
  <div><br>
How would destructive methods like `push` or `sort` behave? Would
`document.body.childNodes.push(document.createTextNode('foo'))` append
text node to a body element? Or would it be a noop?<br>
  </div>
  </div>
</blockquote>
That is actually a very good point.<br>
It think that the behavior should be exactly the same as "an equivalent
without array methods". (this point of my proposal would need to be
made completly explicit for each method)<br>
For push, I think that : <br>
<br>
collection.push(document.createTextNode('foo'));<br>
<br>
// should behave exactly as :<br>
<br>
collection.childNodes[collection.length] =
document.createTextNode('foo');<br>
<br>
I don't know what is the current behavior, but if it throws an error,
push should throw the same error. If it appends a text node to the
body, then push should do the same.<br>
<br>
sort is a bunch of :<br>
"tmp = collection[i];<br>
collection[i] = collection[j];<br>
collection[j] = tmp"<br>
<br>
The first instruction is harmless, but if the second one would throw an
error, then let's throw the same error for .sort.<br>
<br>
The array.prototype methods are actually "shortcuts" for usual coding
patterns. I describe forEach here :
<a class="moz-txt-link-freetext" href="http://longtermlaziness.wordpress.com/2010/04/19/array-foreach-introduction/">http://longtermlaziness.wordpress.com/2010/04/19/array-foreach-introduction/</a>
(by the way, you must be the same Kangax who did the ES5 compat table.
Thank you very much for this work.)<br>
And I have just described push and sort.<br>
<br>
Of course, some patterns (like push, pop, sort, reduce...) may not be
compatible with the fact that we are dealing with live objects. I think
that it is fine. The way those patterns were working (throwing error,
doing nothing, creating a new collection item, whatever) should work
the same with the "shortcuts". There is no reason to change anything
from the DOM point of view and behaviors that was happening on the DOM.
Just "embed the behavior in the shortcut".<br>
<br>
Once again, I only want to change the ECMAScript language binding, not
the DOM interfaces or semantics.<br>
<br>
Thank you for your answers,<br>
<br>
David<br>
</body>
</html>