【问题标题】:JavaScript access string chars as arrayJavaScript 将字符串字符作为数组访问
【发布时间】:2011-05-02 08:54:31
【问题描述】:

这样可以吗:

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

还是应该使用 charAt(0) 或 substr(0,1) 来完成? “可以吗”我的意思是它可以在大多数浏览器上运行,是否有最佳实践建议,否则等等。

谢谢。

【问题讨论】:

    标签: javascript


    【解决方案1】:

    在 ES6 中,我们可以使用解构,因为字符串可以被视为数组:

    const [...rest] = 'Hello!';
    
    console.log(rest)
    > Array ["H", "e", "l", "l", "o", "!"]
    
    console.log(rest[0])
    > "H"
    

    【讨论】:

    • 这应该是正确的答案,因为它是正确处理单个 UTF8 代码点(组合字符、表情符号等)无法表示的字符的唯一方法。
    【解决方案2】:

    2018 年回答:是的,可以访问像数组这样的字符串。

    语法简洁明了。 IE6 和 IE7 早已不复存在。我认为没有理由不使用它。

    【讨论】:

    • 但是:不要误以为可以在字符串上使用所有 Array 方法,例如 reversepop
    【解决方案3】:

    将字符作为字符串的数字属性访问是non-standard prior to ECMAScript 5 and doesn't work in all browsers(例如,它在 IE 6 或 7 中不起作用)。当您的代码必须在非 ECMAScript 5 环境中工作时,您应该使用 myString.charAt(0)。或者,如果您要访问字符串中的大量字符,则可以使用其split() 方法将字符串转换为字符数组:

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

    【讨论】:

    • 只是为非标准评论添加链接/参考,请参阅(在字符访问下):developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…
    • @davin:谢谢。我现在已经在我的回答中链接到该部分。
    • 谢谢,蒂姆。只是想补充一点,它确实在 IE8 中工作。不确定其他人。
    • @Francisc:啊,好的,谢谢。我在 IE 7 上进行了测试。我已经更新了答案。
    • @Francisc:您确定将字符作为字符串的数字属性访问在 IE 8 中有效吗?好像没有。
    【解决方案4】:

    使用charAt 可能是最好的主意,因为它最准确地传达了代码的意图。为单个字符调用substr 绝对是一种矫枉过正。

    alert(myString.charAt(0));
    

    【讨论】:

    • 如果字符串中的第一个字符由多个 UTF8 代码点(表情符号、组合字符等)表示,则此方法会失败。
    猜你喜欢
    • 2023-03-17
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多