【Javascript】発見したこと(初心者なりに)
ajaxComboBoxの改造中に発見したことをメモしておきます。
【test() でマッチを確認】
これまで、このメソッドの存在を知りませんでしたorz
で、いろいろ試してみました。
【基本】var hoge = /aaa/;
var fuga = 'xxxaaaxxx';
alert(hoge.test(fuga)); //ture
【配列】var hoge = /bbb/;
var fuga = [
'aaa',
'bbb',
'ccc'
];
alert(hoge.test(fuga)); //ture
【正規表現リテラルで直接】var fuga = [
'xxxaaaxxx',
'xxxbbbxxx',
'xxxcccxxx'
];
alert((/ccc/).test(fuga)); //ture
【IE8では、空の文字クラスはエラーになる】
下記は、Firefoxなどでは『false』と表示されますが、IE8では
エラーとなります。
var hoge = new RegExp('[]');
alert(hoge.test('aaabbbccc'));//下記も同じ
var fuga = /[]/;
alert(fuga.test('aaabbbccc'));
【IE8では、配列に対して『indexOf()』が使えない】
下記は、IE8ではエラーになってしまいます。
var hoge = ['aaa','bbb','ccc'];
alert(hoge.indexOf('bbb'));
IE8では、『indexOf()』は、文字列に対してしか使えないんですね…。
jQueryを使っているなら『inArray()』メソッドで代替すればOKでしょう。
もしくは、簡単なコードですから自作するか。
(jQuery-1.3.2.js 1086〜1093行目)
inArray: function( elem, array ) {
for ( var i = 0, length = array.length; i < length; i++ )
// Use === because on IE, window == document
if ( array[ i ] === elem )
return i;return -1;
},
【配列、オブジェクトの中身の有無は、lengthで調べられる】
いったん配列やオブジェクトを定義して、その後、ある条件に適ったものだけを
その配列に順番に格納していくという処理で、条件に適ったものが
ひとつもなく、空の配列になっていないかどうかを調べる方法、です。
『length』を使えばいいんだなぁ、と気づきました。
ただし、変数hogeに配列・オブジェクトの他にも格納される可能性がある
var hoge = [];
for(i=0; i<5; i++){
if("何らかの条件"){
hoge[i] = "何らかの値";
}
}//条件に適ったものが、ひとつでもあったか?
if(hoge.length){
//中身有り
} else {
//からっぽ
}
場合は、下記のようにチェックすべきかと。
if(!hoge || !hoge.length){
//からっぽ
} else {
//中身有り
}
【配列で、使われていないインデックスを調べる方法】
下記のような歯抜けの配列で、何番のインデックスが空いているのかを
調べたい場合。
var hoge = [];
hoge[0] = 'aaa';
hoge[2] = 'ccc';
hoge[4] = 'eee';
『NULLかどうか』の検査では、不完全です。
if(hoge[1] == null){
//本当に空いているの…?
}
下記の場合でも、上の条件に当てはまってしまいますから。
var hoge = [];
hoge[0] = 'aaa';
hoge[1] = null;
hoge[2] = 'ccc';
hoge[4] = 'eee';
で、これなら大丈夫だと思います。
if(typeof(hoge[1]) == 'undefined'){
//空いてる!使われてない!
}
(追記:2009/12/23)
または、同値演算子(===)でundefined型であるかどうかを判断します。
if(hoge[1] === undefined){
//空いてる!使われてない!
}