String(value) と value += ''; の違い


think49
読んでる。/ Togetter - 「JavaScript の算術演算子と数値変換」
think49
@ arg = +arg; で ToNumber が呼び出されるというお話。これは Number() と同じ効果がある。
think49
@ ! は ToBoolean 演算子を呼び出して結果を反転する。従って、!! で Boolean() と同じ結果となる。
think49
@ arg += ''; は arg のプリミティブ値に ToString 演算子を適用する。これは String() と結果が異なる。
( の nanto_vi さんのコメントが参考になる)
think49
@ はいー。型変換について調査していたら引っかかりました。
think49
@ それでもこの手法がよくとられるのはプリミティブ値と toString値 (と便宜上置いておく)の値が同値の場合に使われるからだと思う。
think49
@ Number型の値の場合はそれで問題なかった。数値演算はプリミティブ値を元に行われるので必ず同値となる。
think49
@ 実際はないけれども、Object.prototype.toNumber なんてメソッドが定義されていたら同じ問題が出てきたと思う。
think49
@ 実証コードを書いてみた。
think49
"valueOf メソッドはその this 値を返す。"
(ES3: 15.2.4.4 Object.prototype.valueOf)
think49
@ console.log(({}).valueOf() + ''); は console.log(({}).valueOf().toString() + ''); になるから問題ないんだなー。