0

可能重复:
string.charAt(x) 或 string[x]?

似乎"asdf"[0]产生"a". 那么为什么有人会打字"asdf".charAt(0)呢?

这种较短的语法可以安全使用吗?

跨浏览器兼容性?这就是我能想到的。

4

4 回答 4

4

您只能在较新的浏览器中将字符串作为数组访问。要支持较旧的浏览器(即 IE7),您必须使用charAt.

相关:string.charAt(x) 还是 string[x]?

于 2012-09-22T13:51:21.357 回答
1

我认为它使代码更清晰、更易读。如果你使用

foo.charAt(0) 

代替

foo[0] 

(数组索引),你说清楚这foo是一个字符串,而不是一个数组。此外,您不太可能使用其他可能失败的数组方法。

附录

因为有些人不清楚我的意思,让我再说一遍:其他数组方法在String.

自己试试:

var foo = "This is a string.";
foo.push(" A string is not an array.");

你会得到一个类型错误。

对于那些可能将数组表示法与括号表示法混淆的人,请尝试以下实验。打开浏览器的控制台并输入以下内容:

foo = {bar:'ass',fub:'tree',mip:0};

现在尝试使用括号表示法访问第一个元素:

foo['bar']返回“屁股”;

foo[0]返回undefined

于 2012-09-22T13:50:36.627 回答
0

跨浏览器兼容性是个问题。当我打开 IE9 的控制台并将其设置为 IE7 标准时,“a”[0] 产生 undefined 而“a”.charAt(0) 按预期工作。

于 2012-09-22T13:51:33.820 回答
0

大多数浏览器确实允许您将字符串视为字符数组(就像它在许多其他编程语言中一样)。

另一方面,IE 没有。在那里,您必须使用"asdf".charAt(0).

现在我想说,允许[]符号只是浏览器允许您的一个额外选项,使字符串的行为类似于 C、Pascal 等语言。但是,Javascript 中的字符串实际上不是数组,因此按标准不应与[]. 字符串是内置类,因此要访问它们的属性,您必须使用它们的公共方法,就像在 Java 中一样。

于 2012-09-22T13:55:15.433 回答