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