В JavaScript, почему восьмеричное число представляет бросок в виде строки как десятичное число? Я могу бросить шестнадцатеричное использование литеральной строки Number()
или +
, почему не восьмеричное?
Например:
1000 === +"1000" // -> true
0xFF === +"0xFF" // -> true
0100 === +"0100" // -> false - +"0100" gives 100, not 64
Я знаю, что могу проанализировать с parseInt("0100" [, 8])
, но я хотел бы знать, почему кастинг не работает как он, делает с числами в декабре и шестнадцатеричным числом.
Кроме того, кто-либо знает, почему восьмеричные литералы отбрасываются от 5-го Выпуска ECMAScript в строгом режиме?
Потому что вы на самом деле не выполняете приведение в правильном смысле (JS не имеет приведения) - это просто жонглирование типами .
Когда у вас есть какой-либо литерал в Javascript и вы применяете к нему метод, за вас за кулисами создается объект.
Например, "foo" .toUpperCase ()
заменяется оценкой кода, который примерно будет выглядеть так new String ("foo") .toUpperCase ();
Поскольку строки могут не оценивается с помощью унарного оператора +
, JS преобразует вашу строку в число - и не использует parseInt ()
или parseFloat ()
внутри - вы догадались - он использует Number ()
.
Итак, значение, которое вы видите, - это то, что вы увидите в ответе Number () , который, похоже, не принимает восьмеричные числа.