似乎"asdf"[0]
产生"a"
. 那么为什么有人会打字"asdf".charAt(0)
呢?
这种较短的语法可以安全使用吗?
跨浏览器兼容性?这就是我能想到的。
似乎"asdf"[0]
产生"a"
. 那么为什么有人会打字"asdf".charAt(0)
呢?
这种较短的语法可以安全使用吗?
跨浏览器兼容性?这就是我能想到的。
您只能在较新的浏览器中将字符串作为数组访问。要支持较旧的浏览器(即 IE7),您必须使用charAt
.
我认为它使代码更清晰、更易读。如果你使用
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
。
跨浏览器兼容性是个问题。当我打开 IE9 的控制台并将其设置为 IE7 标准时,“a”[0] 产生 undefined 而“a”.charAt(0) 按预期工作。
大多数浏览器确实允许您将字符串视为字符数组(就像它在许多其他编程语言中一样)。
另一方面,IE 没有。在那里,您必须使用"asdf".charAt(0)
.
现在我想说,允许[]
符号只是浏览器允许您的一个额外选项,使字符串的行为类似于 C、Pascal 等语言。但是,Javascript 中的字符串实际上不是数组,因此按标准不应与[]
. 字符串是内置类,因此要访问它们的属性,您必须使用它们的公共方法,就像在 Java 中一样。