Hatena::Groupos0x

FFFF RSSフィード

0xFFのメモです。

2010 July 31st Saturday

密な配列を作る小ネタ

| 00:20 | 密な配列を作る小ネタ - FFFF を含むブックマーク はてなブックマーク - 密な配列を作る小ネタ - FFFF

また脱線メモ。

new Array(10)した配列をforEachしてもスルーされちゃう問題について、IE以外はArray.apply(null, Array(10))とすれば良い via TOYAMA Naoさんのツイート: "そういえば以前、要素数nの密な配列を作るのに Array.apply(null, Array(n)) が使えないかと思ったけど、JScriptでダメだったんだよね。" この方法はIE9pp3でも動いた。

で、ふと別の方法を思いついて試したところIE6でも動いた。こんな感じ。

var a=new Array(10);
a.splice.apply(a, Array(a.length+2));
var r = [];
for (var i in a){
  r.push(i);
}
alert(r);// 0,1,2,3,4,5,6,7,8,9

a.splice.apply(a, Array(a.length+2)); を1行追加するだけ。全然面倒!わかり難い!

まあ、Array(n).join().split(',')よりはマシのような気もしないこともないけど、こういうのが欲しいのは大抵書き捨てのコードなので、やっぱりjoin splitで十分だよね。

今日のJScriptさん

17:22 | 今日のJScriptさん - FFFF を含むブックマーク はてなブックマーク - 今日のJScriptさん - FFFF

調べ物してたらたまたま見つけたどうでもいい知識。

JScriptにはEnumeratorがあった。

var r = [];
var e = new Enumerator(document.all);
e.moveFirst();
while(!e.atEnd()){
  r.push(e.item());
  e.moveNext();
}
alert(r);

Enumerator Object (JavaScript) | Microsoft Docs

まあ、一部の方には今更なんだろうな…。

あと、こんな関数定義もできる。

function Point(x,y){
   this.x = x;
   this.y = y;
}
function Point.prototype.toString(){
   return '{x:' + this.x + ',y:' + this.y + '}';
}
var p = new Point(3,4);
alert(p);//{x:3,y:4}

って、これはEnhanced Scripting in IE9: ECMAScript 5 Support and More – IEBlogでも取り上げられてた。

TOYAMA Naoさんのツイート: "http://bit.ly/9dgaIp JScriptでは function foo, bar, baz() { return 42; } と書くことでひとつの関数をfoo, bar, bazという3変数から参照できたのか。ちょーすげー!!"のほうがアレだ。

あとあと、JScript.NETだとclassとかもあるんですねぇ。

Introducing JScript .NET