#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:
- Пусть number будет результатом вызова ToNumber для входного аргумента.
- Если число равно NaN, верните 0.
(…)
'a'
не является числовой строкой и, следовательно, не может быть преобразован в число, поэтому ToNumber
вернет NaN
(см. Раздел 9.3.1), который затем приводит к 0
.
С другой стороны, если вы передадите допустимую числовую строку, такую как '2'
, ToNumber
, она преобразует ее в соответствующее число, 2
.
Итог:
s.charAt('a')
совпадает с s.charAt(0)
, потому что 'a'
не может быть преобразован в целое число.
Комментарии:
1. я вижу, вы обновили свой ответ, и поступают голоса «за»