IE8だとdisplay:noneのものをjQueyr.is(':hidden')で判断できない?

今回やりたかったのは、テーブルの行を表示・非表示させるというもの。show(), hide()で制御するんだけど、押した瞬間にすでに表示済みかどうか判断するのにis(':hidden')で判断していた。こんな風に

var row = $("#row1");// <tr>のオブジェクトを取得
if (row.is(':hidden')) {
    row.show();
} else {
    row.hide();
}

これで、hidden(非表示)の状態だったら表示(show())するように、表示されていたら非表示(hide())にするようにしていたんだけど・・・。
IE6でもIE7でも問題なく動作するのになぜかIE8だとうまくいかない。is(':hidden')の結果は常にfalse。
そこで、hide()が呼ばれると内部でどうなっているのか見てみると、style属性にdisplay:noneをセットしているのがわかった(以下jquery.jsの引用)。これが使えそう。

			// Set the display of the elements in a second loop
			// to avoid the constant reflow
			for ( var i = 0, l = this.length; i < l; i++ ){
				this[i].style.display = "none"; // たぶんこれ
			}

そして、上記if文を以下のようにすることで、IE8でも表示・非表示を切り替えられるようになりました。

var row = $("#row1");// <tr>のオブジェクトを取得
if (row.css('display') == 'none') {
    row.show();
} else {
    row.hide();
}

うーん。なんとも納得いかない。