Странный JavaScript ?! Как передавать аргументы в parseInt
JavaScript необычайно простой, но в тоже время сложный язык. Особенную сложность языку придают на первый взгляд далеко не очевидные особенности, являющиеся одновременной и сильной и слабой стороной языка.
Вот например, что выведет следующий кусочек кода, как думаете?
['1','2','3'].map(parseInt)
Вы наверное скажите, что все числа будут преобразованы в их исконный числовой вариант:
[1,2,3]
Однако не все так просто, после того как вы выполните данный кусок кода в консоли браузера вы получите следующий результат:
[1,NaN,NaN]
Почему же так происходит? А все потому, что при следующем вызове:
['1','2','3'].map(parseInt)
в функцию parseInt неявно (!) передается еще и второй аргумент (индекс значения), в результате чего (предполагаемый нами) вызов функции
['1','2','3'].map(parseInt)
превращается JavaScript транслятором в
['1','2','3'].map( (value,index) => parseInt(value,index) );
, где value - значение, а index позиция элемента в массиве. А второй аргумент для parseInt как известно это система счисления, в которую будет переводится строковое представление value. И поэтому получается, что при каждом новом вызове данной функции, значение которое мы хотим преобразовать в число, преобразуется в число в системе счисления index. Т.е. вместо десятеричной системы счисления у нас 0, 1, 2 и так далее.
Таким образом, чтобы представленный в самом начале кусок кода сработал вызывать его необходимо следующим образом:
['1','2','3'].map( value => parseInt(value) );
На этом все, будьте внимательны при работе с JavaScript и спасибо за внимание!
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.