Да вы все правильно поняли, используйте предикаты (0b - двоичный, 0o - восьмеричный, 0x - шестнадцатеричный),
в строгом режиме (начиная с ES5) вообще запрещено использовать восьмеричный литерал без предиката:
function foo() {
"use strict";
0321;
}
//Uncaught SyntaxError: Octal literals are not allowed in strict mode.
А происходит это потому, что согласно спецификации все числа с ведущими нулями расцениваются как числа в восьмеричной системе счисления (только не в строгом режиме, см. выше), скорее всего такое поведение было унаследовано от C/C++.