「JavaScriptは言わばひとかたまりの大理石であり、私はその中からこの言語のすばらしい本質が現れるまで、美しくない機能を取り除いていく。最終的に私が削り出すことになる美しいサブセットは、より信頼でき、読みやすく、メンテナンスがしやすく、すべてにおいて非常に優れた言語になると私は信じている。」(「1章 良いパーツ」より)――本書は、JavaScript言語の「良いパーツ」に注目し、良質なコードを書くためのポイントを示唆する書籍です。「良いパーツ」を通してJavaScriptを再評価することで、見落とされていたJavaScript言語の本質が見えてきます。
JavaScript: The Good Parts
―「良いパーツ」によるベストプラクティス
Douglas Crockford 著、水野 貴明 訳
- TOPICS
- Programming , Web , JavaScript
- 発行年月日
- 2008年12月
- PRINT LENGTH
- 198
- ISBN
- 978-4-87311-391-3
- 原書
- JavaScript: The Good Parts
- FORMAT
- Print PDF
関連ファイル
正誤表
書籍発行後に気づいた誤植や更新された情報を掲載しています。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷数をご確認の上、ご利用ください。
2009年1月(2刷にて修正)
- P.38 Math.ceiling(2箇所あり) ↓ Math.ceil - P.131 表B-1 ------------------------ & 論理積(and) | 論理和(or) ^ 排他的論理和(xor) ~ 否定(not) >> 符号付き右シフト >>> 符号なし右シフト << 左シフト ------------------------
2009年6月(3刷にて修正)
- P.10
10を乗じた数
↓
10を累乗した数
- P.13 図2-10 と P.155の図
文の順番を以下ように並べ(上から下へ)て修正。
式文
順序破壊文
try文
if文
switch文
while文
for文
do文
- P.18 表2-1
べき乗計算
↓
剰余
- P.24
stooge["first-name"] // "Joe"
↓
stooge["first-name"] // "Jerome"
- P.34
document.writeln(myObject.getValue()); // 6
↓
document.writeln(myObject.value);
- P.39
Function.prototype.method = function (name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
}
};
↓
Function.prototype.method = function (name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
return this;
}
};
- P.57
last: l,
state: s,
↓
last: l,
middle: m,
state: s,
- P.62の2つめのコード
that.get_name = function () {
return that.says() + ' ' + spec.name + ' ' + that.says();
return that;
↓
that.get_name = function () {
return that.says() + ' ' + spec.name + ' ' + that.says();
};
return that;
- P.82
new RegExp("\"(?:\\.|[^\\\\\\\"])*\"", 'g'))
↓
new RegExp("\"(?:\\\\.|[^\\\\\\\"])*\"", 'g'))
- P.82
なお正規表現リテラルで生成されたRegExpオブジェクトは
↓
なお同じ正規表現リテラルで生成されたRegExpオブジェクトは
- P.85
var doubled_words = /([A-Za-z\u00C0-\u1FFF\u2800-\uFFFD'\-]+)\s+\1/gi;
↓
var doubled_words = /([A-Za-z\u00C0-\u1FFF\u2800-\uFFFD]+)\s+\1/gi;
- P.104
// p is '555-555-1212'
↓
// p is '555-666-1212'
- P.122
JavaScriptはisNan関数を
↓
JavaScriptはisNaN関数を
- P.137 表C-1
glovarの行を削除
- P.157 シェークスピアの引用文中
shoulddwell
↓
should dwell
- P.162
escapee = {
'"': '"'
'\\': '\\',
'/': '/',
b: 'b',
f: '\f',
n: '\n',
r: '\r'
t: '\t'
},
↓
escapee = {
'"': '"',
'\\': '\\',
'/': '/',
b: 'b',
f: '\f',
n: '\n',
r: '\r',
t: '\t'
},
2010年3月(5刷にて修正)
- P.46 6行目 alert(e) ↓ alert(i)
2011年2月(7刷にて修正)
- 16P 図2-19と148Pの最後のダイアグラム
finally節を追加
- 24P 値の取得
誤:
もし文字列式が定数で
正:
もし文字列式が文字列リテラルで
- 37P 最後のコード
誤:
try-it();
正:
try_it();
- 43P サンプルコード
誤:
var myObject = function ( ) {
var value = 0;
return {
increment: function (inc) {
value += typeof inc === ' number' ? inc : 1;
},
getValue: function ( ) {
return value;
}
};
}( );
正:
var myObject = (function ( ) {
var value = 0;
return {
increment: function (inc) {
value += typeof inc === ' number' ? inc : 1;
},
getValue: function ( ) {
return value;
}
};
}( ));
- 46P 先頭のコード(よりよい例)
誤:
var add_the_handlers = function (nodes) {
var i;
for (i = 0; i < nodes. length; i += 1) {
nodes[i].onclick = function (i) {
return function (e) {
alert(i) ;
};
}(i);
}
};
正:
var add_the_handlers = function (nodes) {
var helper = function (i) {
return function (e) {
alert(i) ;
};
};
var i;
for (i = 0; i < nodes. length; i += 1) {
nodes[i].onclick = helper(i) ;
}
};
- 49P カスケード コード
※.を前に書くスタイルに変更
正
getElement('myBoxDiv')
.move(350, 150)
.width(100)
.height(100)
.color('red' )
.border('10px outset' )
.padding('4px' )
.appendText("Please stand by")
.on('mousedown' , function (m) {
this.startDrag(m, this. getNinth(m));
})
.on('mousemove', 'drag' )
.on('mouseup', 'stopDrag' )
.later(2000, function () {
this
.color('yellow' )
.setHTML("What hath God wraught?")
.slide(400, 40, 200, 200);
})
tip(' This box is resizeable' );
-56P 一番下のコード
※1行にする
誤:
method('get_name', function () {
return this.says( ) + ' ' + this.name +
' ' + this. ays( );
});
正:
method('get_name', function () {
return this.says( ) + ' ' + this.name + ' ' + this. ays( );
});
-64P
※必須ではありませんが、こうすることで最後の行の
コメントが見やすくなる(コメントが64Pに収まる)。
旧:
type = typeof event === 'string' ?
event : event.type;
新:
type = typeof event === 'string' ? event : event.type;
- 95P-96P
(※コード抜粋)
誤:
else if (delta > 0) {
k = 1;
while (shift_count) {
this[new_len - k] = this[len - k] ;
k += 1;
shift_count -= 1;
}
}
正:
else if (delta > 0) {
k = 1;
while (shift_count) {
this[new_len - k] = this[len - k] ;
k += 1;
shift_count -= 1;
}
this.length = new_len;
}
- 99P 一番下のコメント行
誤:
// [1] タグ名
// [2] もしあれば「/」
正:
// [1] もしあれば「/」
// [2] タグ名
- 101P
※コメントが(原著において)途中から抜け落ちていたようです
誤:
:
:
// [2] p
// [3]
正:
:
:
// [2] p
// [3]
// [0]