Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

osfameron (3135)

osfameron
  (email not shown publicly)
http://greenokapi.net/blog/

Technorati Profile [technorati.com]

Journal of osfameron (3135)

Tuesday February 01, 2005
09:08 AM

Javascript fun

[ #22968 ]
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.

  • No multiline strings.
  • the 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
  • There's a 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)
The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • The irritating thing, to me, is that it does (sort of) do the right thing for Arrays, but not Array-alikes.

    For an array, for/in iterates over indices. Weird, but fine. It's a fair shorthand for a three-part for. The problem is with Array-like objects like, say, nodeList. A node list is supposed to act just like an Array, but for/in will iterate over a nodeList's attributes, not its elements. Argh! JS needs real iterators.
    --
    rjbs
    • Using a ruby-like for method could be the way forward?

      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")
      });

      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

      --

      osfameron

  • The venerable Aristotle wrote about this recently in his blog [plasmasturm.org] where he demonstrates a lightweight iterator class.
    --

    broquaint out