JavaScriptベストプラクティス30選-jsEdu
#jsEduから適当に選んで日本語にしたものです。
訳とかは全く正確ではなく、as possibleなど表現をかなり省いてるので命令口調になってます。
フィーリング的なものはあんまり入れてないので、興味をもったらTogetter – 「JavaScriptのベストプラクティス大会 jsEdu」を読みましょう。(まとめた奴はこれの10倍くらいありますが、被ってるのや関係無いのもあるので読める程度の量です)
全てを確認したわけではないので、正確性は保証しかねます。
-
==ではなく===を使うべき
(自動的に型変換に行われないのでバグが減る、高速) -
new Object() and new Array() よりも[] or {}を使うべき。
[]や{}の方がシンプル
JavaScriptを高速化する6つのテクニック | エンタープライズ | マイコミジャーナルで出てくるのは間違いだと思う。 -
evalなど文字列から実行するタイプの使うのを避けろ
-
クロージャーでvar that = this;の方が意味合いがいい気がする
-
ループ内で使う変数の宣言はループの外側でしろ
-
If(){}の{}はできる限り省略するな
-
プロトタイプ汚染があるかも知れないときにfor inはhasOwnProperty()と組み合わせ
-
奇数や偶数を知るためにif( i % 2 )を使うなら、ビット演算でif( i & 1 )とやった方が高速。(補足あり)
(整数以外の時は気をつける必要あり https://twitter.com/Constellation/statuses/27349855309 ) -
変数宣言するときにvarはつけ忘れるな。スコープで混乱する
-
jQuery で下のように書くと便利
( function( $ ) { /* Code */ } )( jQuery ); -
alert(“hello”); (いや何となく入れたかった)
-
初期化にvar foo = o || {};とするとoが無いときに空のオブジェクトが入るテクニック。
if文でやるよりも&演算子を使ってオブジェクトの確認した方が高速。
var bar = o && o.bar;// oがあったらo.barがbarに入る -
jQuery on IE6,IE7でClassnameだけのセレクタ指定は避けた方がいい。(遅い)
-
**ある年月の日数を取得するには(その月の最終日)
var numdays = 32 – new Date([year], [month], 32).getDate();
**https://twitter.com/xulapp/statuses/27442123309 -
文字列の結合は配列に入れて最後にjoin(“”)するといい
(主に差が出るのはIE) -
parseInt(number, 10);よりも~~number というようにビット演算使った方が高速(補足あり)
(Math.floorの代替) -
グローバル名前空間を汚すことないように即時実行できる無名関数を使えるときは使う。
(function(){ /* MY CODE HERE */ })() -
Ajaxリクエストでキャッシュが使われたくないときはURLに適当なクエリをつける
var sUrl = “ajaxResponse.php?t=”+new Date().getTime(); -
forループで毎回lengthを参照するのは非効率なので、最初か外に出しましょう。(5と似てる)
for(var 0, arrLen = myArray.length; i<arrLen; i++){…} -
関数のcontextを変えるには”myFunction.call” や”myFunction.apply”が使えるよ。
-
javascript 1.8ならオブジェクトのプロパティ数を取得できる。
function getPropertyCount(obj) return obj.__count__;
Mozilla JavaScript Extension: __count__ | NCZOnline
javascript object __count__ property « ku -
a onclick=”soVeryWrong();”は止めておけ。イベントリスナーを使いましょう。
-
Math.max.apply(Math, arr); その配列arrの最大値が取得できる。
-
Math.floorの代わりにビット演算(補足あり)
var num = 2.222 | 0;// 2 -
**無名関数の即時実行の応用で、undefinedの手に入れ方
(function(undefined){/*now you can be sure that undefined really is undefined*/}()); **
(JavaScriptだとundefinedは書き換え可能なので、void 0などでundefined取得する方法などがある) -
argumentsを配列に変換するなら
var ary = Array.prototype.slice.call(arguments); -
ワンライナーでURLのファイル部分(/から最後まで)を取得するには
location.href.split(“/”).pop(); や location.href.split(“/”).slice(-1)[0];// こっちは非破壊的(この場合意味ないけど) -
JavaScriptでステートメントの最後には**;**をいつもつけておいた方がいい。
-
if文などで偽として評価されるのはfalse, null, undefined, 0, “”, NaNの6つ。
-
sort()は安定ソートではない(Chrome and Operaは特に)、なので扱う時気をつけろ。
16,24の補足
ビット演算は速いけど、副作用がある場合があるので使う時は気をつける。(負の値の時とか)
- 小数から整数部分だけを取り出すときのアレコレ – まるでとりとめのない。
- JavaScriptのビット演算の仕組みを理解する – 風と宇宙とプログラム
- 論理演算1 (mitsunari@cybozu labs) – 副作用
- Bitwise Operators – MDC
Togetter – 「JavaScriptのベストプラクティス大会 jsEdu」 : http://togetter.com/li/59441
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。