Как работает string.charAt () при передаче строки в качестве аргумента? - PullRequest
3 голосов
/ 13 ноября 2011

Согласно MDN JS Doc , метод charAt принимает integer и возвращает символ в индексе. И

Если указанный вами индекс выходит за пределы диапазона, JavaScript возвращает пустую строку.

Я обнаружил, что он также принимает string в качестве аргумента, а возвращаемое значение интригует.

Пример кода: http://jsfiddle.net/yangchenyun/4m3ZW/

var s = 'hey, have fun here.'
>>undefined
s.charAt(2);
>>"y" //works correct
s.charAt('2');
>>"y" //This works too
s.charAt('a');
>>"h" //This is intriguing

Кто-нибудь знает, как это происходит?

1 Ответ

9 голосов
/ 13 ноября 2011

Алгоритм описан в Раздел 15.5.4.4 в спецификации. Там вы увидите (pos - параметр, переданный charAt):

(...)
3. Пусть position будет ToInteger ( pos ).
(...)

ToInteger описано в Раздел 9.4 :

  1. Пусть number будет результатом вызова ToNumber для входного аргумента.
  2. Если число равно NaN , вернуть + 0 .
    (...)

'a' не является числовой строкой и, следовательно, не может быть преобразовано в число, поэтому ToNumber вернет NaN (см. Раздел 9.3.1 ), что приведет к 0.

С другой стороны, если вы передадите правильную числовую строку, такую ​​как '2', ToNumber преобразует ее в соответствующее число, 2.


Итог:

s.charAt('a') совпадает с s.charAt(0), поскольку 'a' не может быть преобразовано в целое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...