Как работает string.charAt() при передаче строки в качестве аргумента?

#javascript #string

#javascript #строка

Вопрос:

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

Если указанный вами индекс находится вне диапазона, 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:

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

(…)
3. Пусть позиция равна 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' не может быть преобразован в целое число.

Комментарии:

1. я вижу, вы обновили свой ответ, и поступают голоса «за»