似乎"asdf"[0]
会产生"a"
。那么为什么有人会输入"asdf".charAt(0)
?
这种较短的语法是否可以安全使用?
跨浏览器兼容性?那是我能想到的全部。
答案 0 :(得分:3)
您只能在较新的浏览器中将字符串作为数组访问。要支持旧浏览器(即IE7),您必须使用charAt
。
答案 1 :(得分:1)
我认为它使代码更清晰,更易读。如果你使用
foo.charAt(0)
而不是
foo[0]
(数组索引),您清楚地表明foo
是一个字符串,而不是一个数组。此外,您不太可能使用可能失败的其他数组方法。
<强>附录强>
因为有些人不清楚我的意思,让我再说一遍:其他数组方法在String
上使用时可能会失败。
亲自尝试:
var foo = "This is a string.";
foo.push(" A string is not an array.");
你会得到一个TypeError。
对于那些可能会使用括号表示法混淆数组表示法的人,请尝试以下实验。打开浏览器控制台并输入以下内容:
foo = {bar:'ass',fub:'tree',mip:0};
现在尝试使用括号表示法访问第一个元素:
foo['bar']
返回“ass”;
foo[0]
返回undefined
。
答案 2 :(得分:0)
跨浏览器兼容性是一个问题。当我弹出IE9的控制台并将其设置为IE7标准时,“a”[0]产生未定义,而“a”.charAt(0)按预期工作。
答案 3 :(得分:0)
大多数浏览器确实允许您将字符串视为字符数组(就像它在许多其他编程语言中一样)。
另一方面,IE不会。在那里,您必须使用"asdf".charAt(0)
。
现在我要说允许[]
符号只是浏览器允许的额外选项,使字符串的行为类似于C,Pascal等语言。但是,Javascript中的字符串实际上不是数组,因此按标准不应与[]
一起使用。字符串是内置类,因此要访问它们的属性,您必须使用它们的公共方法,例如Java。