javascript memo
falseと解釈される値
false
0, -0
NaN
''
null
undefined
変数
var hensu,
str = "文字",
i = 0;
- ローカル変数
- グローバル変数
配列
var pref = [];
var pref = ["Tokyo","Osaka","Nagoya"];
var pref = [{cd:"01",name:"Tokyo"},
{cd:"02",name:"Osaka"},
{cd:"03",name:"Nagoya"}];
console.log( pref.length ); // 3
for(var key in pref){
console.log(pref[key].cd + ":" + pref[key].name);
}
オブジェクト
var obj = {};
var obj = { cd:"01", //key:value
name:"Tokyo"};
obj["cd"] = "01"; //非推奨
obj.cd = "01"; //推奨
obj.fn = function(){
/メソッド/
};
delete obj.prop; //非推奨
- 変数はActivationオブジェクトのプロパティ。
- 関数はFunctionオブジェクト。
- グローバルオブジェクトはwindowオブジェクト。
- arguments オブジェクト。
スコープ
スコープは2つ。
- グローバルスコープ。
- ローカルスコープ。
スコープはなるべく狭い方がよい。
型
- プリミティブ型 number、string、booleanはそれぞれNumber、String、Booleanというオブジェクト型(ラッパーオブジェクト)。
Activation Object(Callオブジェクト、変数オブジェクト)
- 関数が実行時に生成される。(宣言時ではない)
- スコープチェーンの先頭にセット。
activationObject = {
arguments: { / 省略 / },
x: 1,
y: 2,
localFn: function localFn() {
return 'I am a local function.';
},
localVar: undefined
};
スコープチェーン
- 変数を探していく仕組み。
関数
関数は3パターン。
- 関数宣言(function文)。
- 関数式(function演算子)。
- Functionコンストラクタ
関数は全て、実際には Function オブジェクト。
名前つき関数
- 再利用しないなら無名関数を使う方がよい。
- 同じ関数名をつけられる。
- 同じ関数名の場合、一番最後の関数で上書きされる。
function fnc(){console.log("1");}fnc();// 3
function fnc(){console.log("2");}fnc();// 3
function fnc(){console.log("3");}fnc();// 3
どこで呼んでも最後の関数が呼ばれる。実行前に解釈されているため。
即時関数(無名関数)
- スコープを汚さないために使う。
- プライベートにするために使う。
- クロージャーで使う。
- 引数も使える。
- 結果も返せる。
(function(){ }());
(function(){ })();
(function(p1,p2){ }(p1,p2));
var result = (function(p1,p2){ return p1+p2; }(p1,p2));
コンストラクタ
- JavaScriptにクラスはない。
- コンストラクタからインスタンスを作る。
function Dog(name,bark){
this.name = name; //プロパティ
this.bark = function(){ //メソッド
console.log(bark);
};
}
var myDog = new Dog('poch','wowow');
console.log(myDog.name);
mydog.bark;
new演算子で呼ぶ場合、myDogの中にはDog関数のthis(オブジェクト)が入っている。
Functionコンストラクタ
var add = new Function("x","y","return x + y");
console.log(add(1,2));
-末尾の引数が関数の本体。
-本体部分を文字列で指定。
-呼出の度、新たな関数オブジェクトを生成(実行速度低下)。