Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
parseInt('08') // => 8;
parseInt('06') // => 0;
parseInt очень простое. Более того, такого подхода поддерживается большинство языков. Вы не указываете систему счисления и оно пытается её определить согласно содержимому строки по общепринятым правилам. // десятичная система счисления
parseInt('6') // 6
parseInt('8') // 8
// восьмиричная система счисления (начинается с 0)
parseInt('06') // 6
parseInt('08') // 0
// шеснадцатиричная система (начинается с 0x)
parseInt('0x8') // 8
parseInt('0xf') // 15
parseInt('0x10') // 16
// Альтернативы:
Number('08') // 8
parseInt('08', 10) // 8
shock@localhost:~> php -r "print_r( array('6' => 6, '8' => 8, '06' => 06, '08' => 08, '010' => 010) );"
Array
(
[6] => 6
[8] => 8
[06] => 6
[08] => 0
[010] => 8
)
shock@localhost:~> perl -e "print 010"
8
shock@localhost:~> perl -e "print 08"
Illegal octal digit '8' at -e line 1, at end of line
Execution of -e aborted due to compilation errors.
parseInt значительно лучше вернуть не совсем корректный, но ожидаемый результат (а ожидается Number), чем выбросить Error;shock@localhost:~> let "num = 08"; echo $num;
bash: let: num = 08: value too great for base (error token is "08")
shock@localhost:~> let "num = 011"; echo $num;
9
php -r "echo intval('08');" // => 8Если у нас сейчас из-за этой особенности возникла такая дискуссия, то не является ли сам факт её возникновения подтверждением того факта, что язык неоднозначен?
parseInt, которые вполне логичны.perl -e "print int('08')" // => 8 Всегда можно ссылаться на реализацию, говоря о ней так, будто она и является воплощением здравого смысла, но не всегда это так и есть. # Явно
"08".to_i # => 8
"06".to_i # => 6
# Неявно
puts 06 # => 6
puts 08 # => SyntaxError: Invalid octal digit
parseInt('08', 10) // => 8;
parseInt('06', 10) // => 6;система исчисления – по умолчанию восьмиричная.
If the length of S is at least 1 and the first character of S is “0”, then at the implementation's discretion either let R = 8 or leave R unchanged.
radix
An integer that represents the radix of the above mentioned string. While this parameter is optional, always specify it to eliminate reader confusion and to guarantee predictable behavior. Different implementations produce different results when a radix is not specified.
Although it is optional, most implementations interpret a numeric string beginning with a leading '0' as octal. The following may have an octal result.
parseInt("0e0"); // 0 parseInt("08"); // 0, '8' is not an octal digit.
Они не учитывают одну штуку, а именно, насколько их новая технология совместима со старой.
= require "foo" уже нельзя. Какой то бред получается :(
CoffeeScript стал языком по умолчанию в Rails 3.1