OK, I really like Javascript. Most of the reasons to hate Javascript are the incompatibilities between the browsers, and the fact that IE's implementation has broken, laconic error reporting.
In the language, things I don't like include.
for(x in y)
construct applies to Objects and can't be overloaded, so it doesn't do the right thing for arrays and you still need to write for (var i=0; i<arr.length;i++)
ad infinitum
watch
property which is similar to tie
-ing writes to an object, but I can't find a similar way to tie reads.
+
is overloaded to mean string concatenate. To add 2 variables you need to do
something like var1 -0 + var2
(subtracting 0, of course, to coerce it into a number, because doing +0
would just append "0" if var1 is a string)
Re:javascript for/in
osfameron on 2005-02-01T15:22:41
Using a ruby-like for method could be the way forward?You could give nodeList'd prototype a different method which does the right thing there. (Not that I've tested - actually, if nodeList is a native code object then adding a javascript prototype method might not do anything at all useful).Array.prototype.foreach = function(fn) {
var l = this.length;
for (var i=0; i<l; i++) {
fn(this[i])
}
}
var arr=[1,2,3,4,5];
arr.foreach(function(v) {
print( v, ' squared is ', v*v, "\n")
});Also, note that if you add "foreach", it'll appear as a property in for/in!