オブジェクト
JavaScriptにおけるオブジェクトは、クラスのインスタンスとしての性格と、Perlなどの連想配列としての性格の二つを兼ね備えています。
クラスのインスタンスとしてのオブジェクト
sample.js
var date = new Date();
console.log(date.toString());
実行例
$ node sample.js
Sun Jul 28 2013 18:19:24 GMT+0900 (JST)
連想配列としてのオブジェクト
sample.js
var hash = {x1:-1, x2:-2, x3:-3};
for(key in hash) console.log(hash[key]);
実行例
$ node sample.js
-1
-2
-3
プロパティ (またはキー) の存在確認
in演算子を用いる方法の他に、undefinedとの一致判定を行う方法があります。
sample.js
var obj = {x:null, y:2, z:3};
console.log(('x' in obj).toString());
console.log(obj.x !== undefined); //必要に応じて自動でtoStringが呼ばれるためメソッド呼び出しは省略可能
delete obj.x; // プロパティの削除
console.log('x' in obj);
console.log(obj.x !== undefined);
実行例
$ node sample.js
true
true
false
false
ここで、undefinedとの比較による確認では、'!=='となっていることに注意してください。'!='ではありません。
sample.js ('!='を使用した場合)
var obj = {x:null, y:2, z:3};
console.log(('x' in obj).toString());
console.log(obj.x != undefined); //必要に応じて自動でtoStringが呼ばれるためメソッド呼び出しは省略可能
delete obj.x; // プロパティの削除
console.log('x' in obj);
console.log(obj.x != undefined);
実行例
$ node sample.js
true
false
false
false
'!=='では型まで含めた一致判定が行われnullとの比較では一致しないため真が返りますが、'!='では真偽値のみの一致判定 (JSでは偽は「false,null,未定義,0,"",NaN」のみ)であるためnullとの比較でも一致してしまい偽が返ります。
すべての親 Object
JavaScript のすべてのオブジェクトは Object を継承しています。そのため Object が提供するメソッドは任意のオブジェクトで使用できます。例えば、オブジェクトを基本型に変換するメソッドが提供されています。
var obj = new Object();
// オブジェクトの文字列への変換
console.log(obj.toString()); //=> [object Object]
// オブジェクトの文字列でない基本型への変換 (文字列以外が返されることを期待して使用される)
console.log(obj.valueOf()); //=> {}
配列
JavaScriptにおいて、配列はオブジェクトの一種です。そのため、以下の二つは同じ意味です。
コンストラクタ
var arr = new Array();
配列リテラル
var arr = [];
配列オブジェクトには以下のようなプロパティやメソッドが用意されています。
配列の長さ
sample.js
var arr = [1,2,3];
console.log(arr.length);
実行例
$ node sample.js
3
join (/split)
sample.js
var arr = [1,2,3];
console.log(arr.join('-'));
var str = arr.join();
console.log(str); //既定値は','
// 参考: String.split() メソッド
console.log(str.split(','));
実行例
$ node sample.js
1-2-3
1,2,3
[ '1', '2', '3' ]
reverse
既存の配列を破壊的に変更します。
sample.js
var arr = [1,2,3];
console.log(arr);
arr.reverse();
console.log(arr);
実行例
$ node sample.js
[ 1, 2, 3 ]
[ 3, 2, 1 ]
sort
既存の配列を破壊的に変更します。既定では文字列化後のアルファベット順になります。
sample.js
var arr = [2,1,3,11];
console.log(arr);
arr.sort();
console.log(arr);
実行例
$ node sample.js
[ 2, 1, 3, 11 ]
[ 1, 11, 2, 3 ]
比較関数を用意することで任意のソートが可能です。
sample.js
var arr = [2,1,3,11];
console.log(arr);
arr.sort(function(a,b){
return a-b;
});
console.log(arr);
実行例
$ node sample.js
[ 2, 1, 3, 11 ]
[ 1, 2, 3, 11 ]
sample.js
var arr = [
{name:'a', val:2},
{name:'b', val:1},
{name:'c', val:3},
{name:'d', val:11}
];
console.log(arr);
arr.sort(function(a,b){
return a.val-b.val;
});
console.log(arr);
実行例
$ node sample.js
[ { name: 'a', val: 2 },
{ name: 'b', val: 1 },
{ name: 'c', val: 3 },
{ name: 'd', val: 11 } ]
[ { name: 'b', val: 1 },
{ name: 'a', val: 2 },
{ name: 'c', val: 3 },
{ name: 'd', val: 11 } ]
pop/push/shift/unshift
pop/push
sample.js
var arr = [1,2,3];
console.log(arr);
arr.push(4);
console.log(arr);
console.log(arr.pop());
console.log(arr);
実行例
$ node sample.js
[ 1, 2, 3 ]
[ 1, 2, 3, 4 ]
4
[ 1, 2, 3 ]
shift/unshift
sample.js
var arr = [1,2,3];
console.log(arr);
arr.unshift(0);
console.log(arr);
console.log(arr.shift());
console.log(arr);
実行例
$ node sample.js
[ 1, 2, 3 ]
[ 0, 1, 2, 3 ]
0
[ 1, 2, 3 ]
concat
配列に要素を結合したものを返します。非破壊的メソッドであることに注意してください。
sample.js
var arr = [1,2,3];
arr = arr.concat(4,5);
arr = arr.concat([6,7]);
arr = arr.concat([8,['9-1','9-2']]);
console.log(arr);
実行例
$ node sample.js
[ 1, 2, 3, 4, 5, 6, 7, 8, [ '9-1', '9-2' ] ]
slice
いわゆるスライシングを行います。
sample.js
var arr = [1,2,3,4,5,6,7];
console.log(arr.slice(3, arr.length-1)); //slice(fromIndex[, toIndex]) <= [注意]toIndexの要素は含まない
console.log(arr.slice(3, -1)); //シンプルな書き方 (-1の挙動はPerlなどと同じ)
console.log(arr.slice(3)); //toIndexを省略するとすべて取り出す
実行例
$ node sample.js
[ 4, 5, 6 ]
[ 4, 5, 6 ]
[ 4, 5, 6, 7 ]
splice
sliceとconcatを同時実行するようなメソッドです。第1引数はsliceと同様に開始要素のインデックスです。ただし、sliceと異なり第2引数は開始要素からの、対象要素の個数です。対象となる要素群をsliceのように返し、第3引数以降で指定された要素に置換します (指定がなければ削除に相当する処理になります)。
sample.js
var arr = [1,2,3,4,5,6,7];
console.log(arr.splice(3, 3));
console.log(arr);
console.log(arr.splice(3, 0, ['4-1','4-2'], 'new5', 'new6'));
console.log(arr);
実行例
$ node sample.js
[ 4, 5, 6 ]
[ 1, 2, 3, 7 ]
[]
[ 1, 2, 3, [ '4-1', '4-2' ], 'new5', 'new6', 7 ]
関連記事
- JavaScriptにおける関数定義function文で定義します。 sample.js function fact(n) { return (n==0) ? 1 : n*fact(n-1); } for(var i=0; i<7; ++i) console.log(i +'!='+ fact(i)); 実行例 $ node sample.js 0!=1 1!=1 2!=2 3!=6 4!=24 5!=120 6!=...
- Date オブジェクトの使用例 (JavaScript)コンストラクタ // 現在時刻 var d = new Date(); console.log(d); // システムのタイムゾーンに変換して出力 (この例では JST) //=> Thu Jan 29 2015 23:45:21 GMT+0900 (東京 (標準時)) // システムのタイムゾーン (以下の例では JST) での日付指定 d = new Date('2000/01/01')...
- AngularJS が提供するユーティリティAngularJS では JavaScript の言語仕様として不足のある汎用的な処理を補うためにユーティリティが提供されています。代表的なものをコード例とともに列挙します。公式ドキュメントはこちらです。 <!DOCTYPE html> <html lang="ja" ng-app> <head> <meta charset="utf-8"> ...
- JavaScript のグラフ描画ツール Dygraph の使用例ダウンロード こちらのページから dygraph-combined.js をダウンロードします。 サンプルコード チュートリアルより。 <html> <head> <script type="text
- サービス (AngularJS)AngularJS のビルトインサービスのうち代表的なものをコード例とともに列挙します。公式ドキュメントはこちらです。 <!DOCTYPE html> <html lang="ja" ng-app="myApp"> <head> <meta charset="utf-8"> <script src="angular.min.js">...