【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』を使えばいいんだなぁ、と気づきました。


var hoge = [];
for(i=0; i<5; i++){
if("何らかの条件"){
hoge[i] = "何らかの値";
}
}

//条件に適ったものが、ひとつでもあったか?
if(hoge.length){
//中身有り
} else {
//からっぽ
}

ただし、変数hogeに配列・オブジェクトの他にも格納される可能性がある
場合は、下記のようにチェックすべきかと。

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){
//空いてる!使われてない!
}