JavaScript - 型変換のいろいろ - Qiita

オライリーのJavascirpt本の54/821ページあたりを読んでいる.

JavaScriptは動的に型を変換する.

空の文字列は,数値型に変換すると0に変換される.

var empty = ""; // 空の文字列
console.log(Number(empty)); // 0 :これはNumber関数で数値に変換
var hoge = empty - 0; // emptyは動的に数値に変換されて計算される
console.log(hoge); // 0
console.log(typeof hoge); // number

+演算子だと,数値の方が文字列になって結合される.

var huga = empty + 0;
console.log(huga); // "0"
console.log(typeof huga); // string 

オブジェクトを数値に変換するとき,まずvalueOfメソッドを使い,プリミティブ型に変換する.変換できなかった時,toStringメソッドを使いプリミティブ型に変換し,それを数値型に変換する.

var array = [];
console.log(array.valueOf()); // [all: function] : オブジェクトが返される
console.log(array.toString()); // ""(空の文字列)

なので,空の配列で数値計算を行うと,toStringメソッドで空の文字列""に変換された後,空の文字列""が数値0に変換される.

var array = [];
console.log(array - 10); // -10 

配列が空じゃない時の動作.複数要素が入った配列で数値計算すると怒られる.

"2,3"とかは動的に数値型に変換できないため.

var array2 = [2];
console.log(array2 - 10); // -8

var array3 = [2,3];
console.log(array3.toString()); // "2,3"
console.log(array3 - 10); // NaN