Почему 99 > 'string' преобразуется в false?
// parseInt('string') is NaN
// 99 > NaN is false
То есть любые операции сравнения с NaN вернут false. Используйте функцию isNaN(...).
И что вы скажете когдаNaN === NaN // is false
А с чего это вдруг NaN === 0?