Javascript固有の技術的事情。
Javascriptからちょっと離れていたり他の言語使っていたりすると忘れてしまうポイントをまとめておく。
まあ自分のための備忘録でもある。
目次
変数の型
- プリミティブ型
- 数値型
- 文字列型
- 論理型
- null型
- undefined型
- オブジェクト型
- 配列
- 連想配列
- 日付
- :
値渡しと参照渡し
プリミティブ型は値渡し、オブジェクト型は参照渡し
ライブラリ
var myLib = {};
myLib.methodA = function () {
// 処理
:
return result;
};
myLib.methodB = function () {
// 処理
:
return result;
};
クラス
// http://www.yunabe.jp/docs/javascript_class_in_google.html
// クラスとコンストラクタは関数を使って定義します
Person = function(name, age) {
// this はインスタンスを表します。
this.name = name;
this.age = age;
};
// メソッドはコンストラクタの prototype プロパティに定義します
Person.prototype.getName = function() {
// メンバ変数の定義・参照は this.<メンバ変数> を使います。
// C++, Java と違い this は省略できません。
return this.name;
};
Person.prototype.sayHello = function() {
// メソッド内から他のメソッドを呼ぶ場合も this.<メソッド> を使います。
// C++, Java と違い this は省略できません。
console.log('Hello I\'m ' + this.getName());
};
false
の扱い
以下の場合にfalse
判定される
if (false) {
// do something: 実行されない
}
if (null) {
// do something: 実行されない
}
if (undefined) {
// do something: 実行されない
}
if ('') {
// do something: 実行されない
}
if (0) {
// do something: 実行されない
}
if (NaN) {
// do something: 実行されない
}
false
判定のうまい使い道
if (myObject) //オブジェクトのインスタンスの有無
if (document.addEventListener) //メソッドの有無
if (items.length) //要素の有無
function(x){
x = x || 'Hello'; // 変数の初期値設定
:
}
var myApp = myApp||{}; // 安全な名前空間の登録
false
や0
という値に意味がある場合はうまく動作しなくなるので、そこは気をつけて。
変数の厳密な初期値判定
function(x){
if (typeof(x) === undefined) {
x = 'Hello';
}
:
}
文字列処理
文字列の一部取得
str.substr(start[, length]) // もう使わない
str.substring(start[, end])
インデックスは文頭が0、文末がstr.length - 1
正規表現
- マッチするかどうか →
regexp.test('str')
→true / false
- 正規表現置換 →
str.replace(pattern, replacement)
- マッチした部分を返す →
str.match(pattern)
(ただし/g
で) → マッチした部分の配列
都度実行すると地味に遅くなるので繰り返し処理では避けたほうがいい処理
Array.prototype.length
document.getElementById('hoge')
→一旦別の変数に格納して
一見jQueryでやりたくなることでもネイティブのJavascriptでできる
非同期処理対策
Javascriptで最もハマるポイントである非同期処理
window.setTimeout(callback, n)
は処理指定時間遅らせるためのものwindow.setTimeout(callback, 0)
は処理を分割するためのもの(フリーズしないように)
http://qiita.com/jkr_2255/items/17693ab77beea71a871c- 出力を待つのは即時関数で
(function(){}(渡す変数));
→コールバックと即時関数のネストがカオスに!
http://qiita.com/yasumodev/items/675cda95ca1be39deb6e
日付処理あれこれ
JavaScriptで日時を使ってランダムな文字列を作るワンライナー
セッションIDやユーザIDを生成する際などに使う。
- 日時(マイクロ秒)→ユニーク
- ランダムな数字列
の結合。前者と後者の結合はドット(.
)を使う
[new Date().getTime().toString(), Math.floor(1E12*Math.random())].join('.')
DOM指定
- IDのみで指定できる場合→
document.getElementById()
- XPathで指定→
document.evaluate()
- CSSPathで指定→
document.querySelector()
- 単純なものはXPathよりCSSPathのほうが速い
HTMLの一部書き換え(追記)
node.appendChild(newElement)
node.insertBefore(newElement,referenceElement)
element.innerHTML = '<div>something</div>'
過去記事 の記事一覧