JavaScriptで文字列比較は抽象的等価比較の方が速い

以下は間違っているのでこれを参照して下さい。

等価演算子と厳密等価演算子 in ECMA-262 3rd Edition - 0x集積蔵でString同士をやっていないので、やったら、結果が逆転しているような気がする。ただ、アルゴリズムを見る限りはどちらも同じような感じの経路をたどるんだよなぁ……。わけわからんけど、高速化のために等価比較いじるよりも、アルゴリズムを見直すことが重要なのはよくわかった。

でも、IEに限るけど、文字リテラルとか一時的にでもいいから変数に入れた方がパフォーマンスがいいことがよくわかったw

IE7

抽象的等価比較 String == String
354
厳密等価比較 String === String
411
抽象的等価比較 String == String
244
厳密等価比較 String === String
253

Fx3

抽象的等価比較 String == String
42
厳密等価比較 String === String
45
抽象的等価比較 String == String
49
厳密等価比較 String === String
59

ベンチマーク

function write() {
	var str = [];
	for (var i = 0, j = arguments.length; i < j; ++i)
		str[i] = arguments[i];
	document.write(str.join(' ') + '<br>');
}

var arrN = [],arrS = [],arrO = [];
for(var i=0;i<150000;i++)arrS[i]=""+Math.ceil(Math.random()*6); // 1〜6の乱数を文字列にしたものを生成

(function (arr) {
	write("抽象的等価比較 String == String");
	var d=new Date;
	for(var i=0,j=arr.length;i<j;++i)arr[i]=="6";
	write((new Date)-d);
})(arrS.concat());

(function (arr) {
	write("厳密等価比較 String === String");
	var d=new Date;
	for(var i=0,j=arr.length;i<j;++i)arr[i]==="6";
	write((new Date)-d);
})(arrS.concat());

(function (arr) {
	write("抽象的等価比較 String == String");
	var d=new Date;
	for(var i=0,j=arr.length,a="6";i<j;++i)arr[i]==a;
	write((new Date)-d);
})(arrS.concat());

(function (arr) {
	write("厳密等価比較 String === String");
	var d=new Date;
	for(var i=0,j=arr.length,a="6";i<j;++i)arr[i]===a;
	write((new Date)-d);
})(arrS.concat());