Unary + and Number() understand the ES2015 binary literal syntax, so "0b101" parses as binary 101 = 5. parseInt without a radix sees the leading "0", then hits "b" which is not a valid base-10 digit, and stops, returning just 0. This is a key difference: Number knows 0b/0o/0x prefixes, but parseInt only special-cases 0x.