When you use parseFloat, or parseInt, the conversion is less strict. 1b5 -> 1.
Using 1*number or +number to convert will result in NaN when the input is not valid number. Though unlike parseInt, floating point numbers will be parsed correctly.
Table covering all possible relevant options.
//Variables    // parseInt  parseFloat  + 1* /1   ~~ |0 ^1 >>0  >>>0
var a = '123,',//   123        123       NaN       0     & <<0   0
    b = '1.e3',//   1          1000      1000      1000          1000
    c = '1.21',//   1          1.21      1.21      1             1
    d = '0020',//   16         20        20        20            20
    e = '0x10',//   16         0         16        16            16
    f = '3e9', //   3          3000000000  <--    -1294967296    3000000000
    g = '3e10',//   3          30000000000 <--    -64771072      4230196224
    h = 3e25  ,//   3          3e+25     3e+25     0             0
    i = '3e25',//   3          3e+25     3e+25     0             0
    j = 'a123',//   NaN        NaN       NaN       0             0
    k = '  1 ',//   1          1         1         1             1
    l = '    ',//   NaN        NaN       0         0             0
    m = '.1  ',//   NaN        0.1       0.1       1             1
    n = '1.  ',//   1          1         1         1             1
    o = '1e999',//  1          Infinity  Infinity  0             0
    p = '1e-999',// 1          0         0         0             0
    q = false ,//   NaN        NaN       0         0             0
    r = void 0,//   NaN        NaN       NaN       0             0
    _ = function(){return 1;}, /* Function _ used below */
    s={valueOf:_},//NaN        NaN       1         1             1
    t={toString:_};// 1        1         1         1             1
// Intervals: (-1e+20, +1e20)  (-∞,+∞)   (-∞,+∞)   (-2³¹,+2³¹)   [0, 2³²)
// In FF9 and Chrome 17, Infinity === Math.pow(2, 1024), approx. 1.7976e+308
// In FF9 and Chrome 17, bitwise operators always return 0 after about ±1e+25
Notes on number conversion methods:
- The number conversion always fail if the first character, after trimming white-space, is not a number.
- parseIntreturns an integer representation of the first argument. When the radix (second argument) is omitted, the radix depends on the given input.
 - 0_= octal (base-8),- 0x_= hexadecimal (base-16). Default: base-10.
 - parseIntignores any non-digit characters, even if the argument was actually a number: See h, i.
 To avoid unexpected results, always specify the radix, usually 10:- parseInt(number, 10).
- parseFloatis the most tolerant converter. It always interpret input as base-10, regardless of the prefix (unlike- parseInt). For the exact parsing rules, see here.
 
 The following methods will always fail to return a meaningful value if the string contains any non-number characters. (valid examples:- 1.e+0 .1e-1)
- +n, 1*n, n*1, n/1and- Number(n)are equivalent.
- ~~n, 0|n, n|0, n^1, 1^n, n&n, n<<0and- n>>0are equivalent. These are signed bitwise operations, and will always return a numeric value (zero instead of- NaN).
- n>>>0is also a bitwise operation, but does not reserve a sign bit. Consequently, only positive numbers can be represented, and the upper bound is 232 instead of 231.
 
 
- When passed an object, parseFloatandparseIntwill only look at the.toString()method. The other methods first look for.valueOf(), then.toString(). See q - t.
 
 
- NaN, "Not A Number":
 - typeof NaN === 'number'
 - NaN !== NaN. Because of this awkwardness, use- isNaN()to check whether a value is- NaN.
When to use which method?
- parseFloat( x )when you want to get as much numeric results as possible (for a given string).
- parseFloat( (x+'').replace(/^[^0-9.-]+/,'') )when you want even more numeric results.
- parseInt( x, 10 )if you want to get integers.
- +x, 1*x ..if you're only concerned about getting true numeric values of a object, rejecting any invalid numbers (as- NaN).
- ~~, 0| ..if you want to always get a numeric result (zero for invalid).
- >>>0if negative numbers do not exists.
 The last two methods have a limited range. Have a look at the footer of the table.
The shortest way to test whether a given parameter is a real number is explained at this answer:
function isNumber(n) {
    return typeof n == 'number' && !isNaN(n - n);
}