2011年05月10日

JavaScriptのindexOf(その2)

JavaScriptのindexOf(その1)の続き。

IE8では、配列の要素を検索する関数、indexOf()が実装されていなくて憤慨という話です。
前回は、JavaScriptのprototypeにindexOf()の実装をぶち込みましたが、
実はjQueryに同じ機能を持つ関数があります。

jQueryのinArray()
var array = {"a", "b", "c", "d"};
var foundIndex = jQuery.inArray("b", array);
// ↑foundIndexには1が入ります。
foundIndex = jQuery.inArray("e", array);
// ↑eは見つからないので-1が戻ります。


jQueryといえばセレクターやアニメーションに目が行きがちですが、
Utilitiesの下にちょっぴり便利な関数があったりします。


IE9ではindexOf()が実装されたようです。
IE9って実は結構がんばっているのだろうか?
ラベル:javascript jquery
posted by ぺるたご at 22:42| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2011年05月01日

JavaScriptでは関数の先頭で変数が宣言される

またJavaScriptの小ネタ。

何が表示される?
<script>
var a = "グローバル変数";
function doSomething() {
alert(a);
var a = "ローカル変数";
}
</script>


doSomething()が実行されたとき、何が表示されるでしょうか?
「alert(a);」の時点ではローカル変数は宣言されてないので、
直感的には「グローバル変数」と表示されそうな気がします。
ですが表示されるのは「Undefined」です。
何故!?

JavaScriptでは、関数内のどこで変数を宣言しても、内部的には関数の先頭で宣言されています。
なので「alert(a);」の時点で、既にグローバル変数は上書きされていることになります。

この罠を回避するには以下のような感じでしょうか。
・グローバルとローカルで変数名がかぶらないようにする。
・グローバル変数を使うときはthisを付けるようにする。
・関数の先頭でローカル変数を宣言するようにする。

関数の先頭でローカル変数を宣言するのは、個人的には嫌ですね。
ローカル変数を使う直前で宣言したいところです。
なんにせよ、素直にプログラムを書いていたらこの罠にはまることってあまりないと思います。
ラベル:javascript
posted by ぺるたご at 22:21| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。