JavaScript необычайно простой, но в тоже время сложный язык . Особенную сложность языку придают на первый взгляд далеко не очевидные особенности, являющиеся одновременной и сильной и слабой стороной языка.

Странный 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 и спасибо за внимание!