Почему не делает восьмеричного литерала, поскольку строка бросила к числу?

В JavaScript, почему восьмеричное число представляет бросок в виде строки как десятичное число? Я могу бросить шестнадцатеричное использование литеральной строки Number() или +, почему не восьмеричное?

Например:

1000 === +"1000" // -> true
0xFF === +"0xFF" // -> true
0100 === +"0100" // -> false - +"0100" gives 100, not 64

Я знаю, что могу проанализировать с parseInt("0100" [, 8]), но я хотел бы знать, почему кастинг не работает как он, делает с числами в декабре и шестнадцатеричным числом.

Кроме того, кто-либо знает, почему восьмеричные литералы отбрасываются от 5-го Выпуска ECMAScript в строгом режиме?

23
задан Shog9 18 August 2010 в 00:14
поделиться

1 ответ

Потому что вы на самом деле не выполняете приведение в правильном смысле (JS не имеет приведения) - это просто жонглирование типами .

Когда у вас есть какой-либо литерал в Javascript и вы применяете к нему метод, за вас за кулисами создается объект.

Например, "foo" .toUpperCase () заменяется оценкой кода, который примерно будет выглядеть так new String ("foo") .toUpperCase ();

Поскольку строки могут не оценивается с помощью унарного оператора + , JS преобразует вашу строку в число - и не использует parseInt () или parseFloat () внутри - вы догадались - он использует Number () .

Итак, значение, которое вы видите, - это то, что вы увидите в ответе Number () , который, похоже, не принимает восьмеричные числа.

4
ответ дан 29 November 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: