数値にNaNを足すとNaNになります。
実際のところ
グローバル変数NaNは"Not-A-Number"の略で、数値でない事を示す変数です。
数値を吐き出すメソッドでミスった場合に出力されます。
Math.sqrt(-1)
// NaN
このNaN、一つ奇妙な特性があり……既存の数値に足し込むと、巻き添えを喰らってNaNになります
var a = 1 a += NaN console.log(a) // => NaN
これはfalseやnullでは発生しない現象です。
console.log(7 + false) // 7 console.log(7 + null) // 7 console.log(7 + NaN) // NaN
これを回避するには、足し込む前にパースするなりの対策が必要です。
javascriptではRubyと同様に正オブジェクトの否定の否定はTrueです。
更にNaNは否定するとTrueになります。
これらを活かして、以下のようにしました。
var a = 1 var result = NaN a += (!!result) ? (result) : (0) console.log(a) // 1
補足
NaNを文字列に加算すると、数値として認識され"NaN"とパースされます。
この場合にも、数値の計算時と同様何らかの対策が必要でしょう。
"hoge" + NaN // 'hogeNaN'