JavaScript如何使用数组方式访问字符串中的字符

54

这样做可以吗:

var myString="Hello!";
alert(myString[0]); // shows "H" in an alert window

或者应该使用charAt(0)或substr(0,1)吗? “可以吗”是指它在大多数浏览器上是否有效,是否有最佳实践建议否则等等。

谢谢。

4个回答

54

在ECMAScript 5之前,将字符串视为数字属性来访问字符是非标准的,并且不能在所有浏览器中使用(例如,在IE6或7中无法工作)。当您的代码必须在非ECMAScript 5环境中运行时,应改用myString.charAt(0)。或者,如果您要访问字符串中的许多字符,则可以使用其split()方法将字符串转换为字符数组:

var myString = "Hello!";
var strChars = myString.split("");
alert(strChars[0]);

2
只需添加一个链接/参考文献,以供非标准注释使用,请参见(字符访问下):https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String - davin
@davin:谢谢。我现在已经在我的回答中链接到了那个部分。 - Tim Down
谢谢,Tim。只是想补充一下,在IE8中它确实可以工作。不确定其他浏览器。 - Francisc
嘿!是的:var myStr="JavaScript";alert(myStr[4]); 将显示 "S"。我刚刚又测试了一下。 - Francisc
请记住,这将显著增加内存使用量。 - gsnedders
显示剩余4条评论

51

使用charAt可能是最好的选择,因为它最准确地传达了您代码的意图。调用substr来获取单个字符绝对是过度使用。

alert(myString.charAt(0));

2
如果字符串中的第一个字符由多个UTF8代码点(表情符号、组合字符等)表示,则此方法将失败。 - Matthemattics

18

2018年的答案是:可以像数组一样访问字符串。

语法清晰简洁。IE6和IE7早已过时。我认为没有理由不使用它。


1
然而,不要混淆思想,认为您可以在字符串上使用所有的数组方法,例如reversepop - Matt Montag

7
ES6 中我们可以使用解构,因为字符串可以被视为一个数组:
const [...rest] = 'Hello!';

console.log(rest)
> Array ["H", "e", "l", "l", "o", "!"]

console.log(rest[0])
> "H"

1
这应该是正确的答案,因为它是唯一一个正确处理不能由单个UTF8代码点(组合字符、表情符号等)表示的字符的方法。 - Matthemattics
你不需要ES6来做那件事。rest = Array.prototype.slice.call("Hello!")将返回相同的结果,并且它可以在旧浏览器中工作。 - PHP Guru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接