読者です 読者をやめる 読者になる 読者になる

素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

ラベル付きbreak

普通だったら一時変数にフラグを立てなきゃいけないような場面でも、ラベル付きbreakを使えば一気に多重ループから抜け出すことができる。
例えば、高速なgetElementsByClassName - 素人がプログラミングを勉強するブログをこの構文を使って書き直すと、flagという変数を使って分岐する必要がなくなる。

if (typeof HTMLElement.prototype.getElementsByClassName!="function")
  HTMLElement.prototype.getElementsByClassName=function(className) {
    var names=className.split(/\s+/),
    all=this.getElementsByTagName("*"),
    memo={},
    ret=[];
    for(var i=0,l=all.length,elem,iname;i<l;i++) findElem:{
      elem=all[i];
      iname=elem.className;
      if (!(iname in memo))
        memo[iname]=" "+iname.toLowerCase()+" ";
      for (var j=0,jname;j<names.length;j++) {
        jname=names[j];
        if (!(jname in memo))
          memo[jname]=" "+jname.toLowerCase()+" ";
        if(memo[iname].indexOf(memo[jname])!=-1)continue;
        else break findElem;
      }
      ret[ret.length]=elem;
    }
    return ret;
  }
if (typeof document.getElementsByClassName!="function")
  document.getElementsByClassName=function(className) {
    return document.documentElement.getElementsByClassName(className);
  }