Алгоритм описан в Раздел 15.5.4.4 в спецификации. Там вы увидите (pos
- параметр, переданный charAt
):
(...)
3. Пусть position будет 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'
не может быть преобразовано в целое число.