Is there any reason I should use string.charAt(x) instead of the bracket notation string[x]?
string.charAt(x)
string[x]
They can give different results in edge cases.
'hello'[NaN] // undefined 'hello'.charAt(NaN) // 'h' 'hello'[true] //undefined 'hello'.charAt(true) // 'e'
The charAt function depends on how the index is converted to a Number in the spec.