Существует разница при попытке доступа к индексу, который находится за пределами или не является целым числом.
string[x]
возвращает символ в x
-й позиции в string
, если x
является целым числом от 0 до string.length-1
и возвращает undefined
в противном случае.
string.charAt(x)
преобразует x
в целое число, используя процесс, объясненный здесь (который в основном округляется x
вниз, если x
нецелое число, и возвращает 0, если parseInt(x)
равно NaN
), а затем возвращает символ в этой позиции, если целое число находится в диапазоне от 0 до string.length-1
, и возвращает пустую строкув противном случае.
Вот несколько примеров:
"Hello"[313] //undefined
"Hello".charAt(313) //"", 313 is out of bounds
"Hello"[3.14] //undefined
"Hello".charAt(3.14) //'l', rounds 3.14 down to 3
"Hello"[true] //undefined
"Hello".charAt(true) //'e', converts true to the integer 1
"Hello"["World"] //undefined
"Hello".charAt("World") //'H', "World" evaluates to NaN, which gets converted to 0
"Hello"[Infinity] //undefined
"Hello".charAt(Infinity) //"", Infinity is out of bounds
Другое отличие состоит в том, что присвоение string[x]
ничего не делает (что может привести к путанице), а присвоение string.charAt(x)
является ошибкой (так какожидается):
var str = "Hello";
str[0] = 'Y';
console.log(str); //Still "Hello", the above assignment did nothing
str.charAt(0) = 'Y'; //Error, invalid left-hand side in assignment
Причина, по которой присвоение string[x]
не работает, заключается в том, что строки Javascript неизменны .