マウスカーソルを
ハートアイコンに変えてくれる
キラキラした何かが追ってきてくる
訪問時刻が夜中だったら
「まだ起きてるんですか?(^o^)/」
どうでもいい(むしろウザイ)使われ方ばかりされ、
Java Appletと共に忌み嫌われる存在になる(><)
← IT戦士 (id:amachang)やっぱり基礎は知っておかないと! ←今日ココ
そんなJavaScriptの歴史をグラフにしてみました。
. 嫌われ者 脇役 主役 ┝━━━━━━┿ - - - - ┥ ∩___∩ /) | ノ ヽ ( i ))) / ● ● | / / 今ココ | ( _●_) |ノ / 彡、 |∪| ,/ / ヽノ /´ .
詳しい歴史については「JavaScript - Wikipedia」を見てね
<script type="text/javascript"> ... </script>
こうする:
<script type="text/javascript"> <!-- ... // --> </script>
document.write('<p>...</p>');
もし</を書く必要があるなら
エスケープ:
'<¥/script'
分割:
'<' + '/script'
if (a < 1 && b < 10)
こうする:
if (a < 1 && b < 10)
こんなの、ほとんどの人は正しく書けてない!
外部スクリプトにすればおk
<script type="text/javascript" src="foo.js"></script>
その他色々
理由の無いdocument.writeはやめよう
<script>はなるべく下に書こう
文字列形式のfunctionはやめよう
setTimeout('foo()', 0)
じゃなくて
setTimeout(foo, 0)
などなど、他にも書き切れないほどあるので、
それはまたの機会に(><)
時間が無いので、はしょります(><)
1 + 1 = 2 '1' + '1' = '11'
型が違うときは適当に変換してくれる
false + 1 = 1 true + 1 = 2 2 - '1' = ? 2 + '1' = ?
自動変換で発生するミス
数値の加算と文字列の連結が同じ演算子なのが問題
見覚えある人、手挙げて!
グローバル変数はバグの温床
グローバル変数はスクリプトを遅くする
グローバル変数はずっと残る(ローカル変数はスコープを外れると破棄される)
グローバル変数まで辿って行くのは大変
ってJavaScriptインタプリタが言ってた
グローバル変数はやめよう
iがグローバル変数:
var i; // window['i']
function foo() {
for (i = 0; i < 10; ++i) {
}
}
foo();
こうした方がクリーンで速い:
function foo() {
var i;
for (i = 0; i < 10; ++i) {
}
}
foo();
function foo(bar) {...}
関数もオブジェクト
var foo = function(bar) {...}; // 無名関数を代入
実はFunctionをnewしてる
var foo = new Function('bar', '...');
関数は手続きをまとめるもの だけじゃなくて スコープの基本単位
function foo() {
var x = 3;
}
関数に閉じ込めると外に漏れない。
(function(){
...
})();
生い立ちを解説します
function foo() {...}
foo();
var foo = function() {...};
foo();
function() {...}(); // これはsyntax error
(function() {...})();
function foo() {
// this === foo
}
new foo();
function foo() {
// this === foo
function bar() {
// this !== foo
}
}
new foo();
function foo() {
// this === foo
var self = this; // self === foo
function bar() {
// self === foo
}
}
new foo();
関数を作ると「外側の関数に含まれる変数」が束縛される
APIがどんどん公開されていて、 JavaScriptができると大抵なんでもできちゃうようになってきた。
さあ、JavaScriptを始めよう!