js字符串可以用[]访问单个字符,为什么还要有charAt()?

js字符串可以用[]访问单个字符,为什么还要有charAt()?
这两者在性能上会有什么区别?一般提倡用哪种,有场景区分吗?

阅读 7.9k
4 个回答

这两种方式都可以获取到字符串对应位置的字符,获取的位置是从0开始。
下面说下区别:

  1. 第一个区别前面的都有提及,就是
    使用string[index]的方式,对于超出字符index范围的,会返回undefined
    而使用charAt(index)的方式,对于超出范围的会返回一个空的字符串。

  2. 第二个区别,是兼容性问题
    string[index]的方式在IE6~8下会返回 undefined, 也就是IE6~8 不兼容此方法
    而charAt(index)经测试,在IE6~8下也能够正常返回值。

所以如果你不需要考虑IE6~8的话,就可以随便用了,至于性能,都是JavaScript的方法,差别微乎其微。
如果你还是苦逼的要考虑IE6~8的话,劝你还是老老实实的使用charAt吧,安全又放心,不就是多了几个字符吗?

var s = "abc";
s[1];        // b
s.charAt(1); // b
s[5];        // undefined
s.charAt(5); // ""

所以,可能的原因是,当索引超出范围时,charAt() 返回的结果更合理,更好判断。

alert("abc"[3]); // undefined
alert("abc".charAt(3)); // return ""

IE7和IE7以下的浏览器不支持直接用 '[]'这个操作符去获取指定索引上的字符

console.log("abc"[0]) // undefined    
推荐问题
宣传栏