kidoOooOoooOOom

IT系で開発やってます

Effective JavaSceipt 読書メモ項目1〜3

改めて基礎を勉強するモチベーションが出てきたので、積んでた下記の本をメモっていく。

第1章 JavaScriptに慣れ親しむ

項目1 どのJavaScriptを使っているのかを意識しよう

JavaScript は標準規格に複数の版が存在するだけでなく、JavaScriptの実装によってサポートがあったりなかったりする非標準の機能もかなりあるので注意が必要。
例えば、const キーワードの振る舞いが実装によって異なる。
ある実装では、constで定義した変数は変更がきかないが、とある実装では var の同義語として使われている。


ECMAScript5ではバージョンの問題に体する配慮として、strict モードが追加された。
これにより、比較的問題の多い機能の一部を禁止することができる。

使用方法としては、スクリプトまたは関数の先頭に下記を記述する。
"use strict"

落とし穴として、スクリプト連結を行う場合、strictファイルと非strictファイルを連結すると予期しない結果になることが起こりうる。
strictモードを使うか、使わないかの一貫したポリシーを持つのが良さそうである。

項目2 JavaScript浮動小数点数を理解しよう

JSでは、すべての数が倍精度浮動小数点数である。一般にいう double.
ほとんどの数値演算は、整数にも、実数にも、両方の組み合せに使える。

console.log(0.1 * 1.9); // 0.19
console.log(-99 + 100); // 1
console.log(21 - 12.3); // 8.7
console.log(2.5 / 5); // 0.5
console.log(21 % 8); // 5


ビット演算を行う際は、暗黙のうちに32bit 整数に変換してから実行される。

console.log(8 | 1); // 5

8が 0000 0000 0000 1000 で、 1 が 0000 0000 0000 0001 として扱われ、
OR演算で 0000 0000 0000 1001 となり 9 ができあがる。

浮動小数点数の計算は近似値であり、丸め誤差が発生するので要注意である。

console.log(0.1 + 0.2); // 0.30000000000000004
console.log((0.1 + 0.2) + 0.3); // 0.6000000000000001
console.log(0.1 + (0.2 + 0.3)); // 0.6

項目3 暗黙の型変換に注意しよう

JSは型エラーを驚くほど容認してくれる。下記のような式が普通に通る。

console.log(8 | 1); // 5

数と文字列の組み合わせについても、下記のように暗黙の型変換がある。

console.log("2" + 3); // 23
console.log(1 + 2 + "3"); // 33
console.log(1 + "2" + 3); // 123

また、JSで falseとして判定される値は、このブログの過去記事に書いた値たちである。
これ以外は全て 真 と判定される。
http://kidooom.hatenadiary.jp/entry/20140128/1390924792

オブジェクトはvalueOfによって数値に変換され、toStringによって文字列に変換される。
よって、valueOfメソッドを持つオブジェクトは、そのvalueOfによって生成される数値の文字列表現を提供するtoStringメソッドを実装すべきである。