【问题标题】:Javascripts String.split - how does it work internally?Javascript String.split - 它是如何在内部工作的?
【发布时间】:2014-02-18 13:43:57
【问题描述】:

我最近和一位同事讨论了 String.split 的分隔符是如何在 JavaScript 内部处理的。

分隔符是否总是转换为正则表达式?例如。调用String.split(",", myvar) 会将"," 转换为匹配该字符串的正则表达式吗?

【问题讨论】:

  • JavaScript 规范概述了给定一系列输入的必要输出,但没有指定任何具体实现。这意味着浏览器在实现规范时,只要结果符合规范,就可以随意执行。基本上:它在内部如何工作并不重要,并且不能保证它在浏览器之间保持一致。

标签: javascript internals


【解决方案1】:

您的问题的答案是:“分隔符是否总是转换为正则表达式?”是:

这完全取决于实现。例如,如果您查看 WebKit 实现 http://svn.webkit.org/repository/webkit/trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp(查找 stringProtoFuncSplit),那么您会发现它并不总是转换为 RegEx。不过这并不代表什么,只是实现的问题

【讨论】:

  • 谢谢,这是我正在寻找的答案!
【解决方案2】:

这里是official writeup over at ecma,但相关部分围绕此部分:

8.如果separator是RegExp对象(它的[[Class]]是“RegExp”),令R = separator;否则令 R = ToString(separator)。

话虽如此,它是 ecma 规范,正如 Anthony Grist 在 cmets 中提到的,浏览器可以随心所欲地实现,例如 V8 实现了 ecma262。

编辑:扩展了对浏览器/js 引擎实现的思考,似乎大多数实现了 ecma 的版本,as seen on this wiki

【讨论】:

    【解决方案3】:

    是的,javascript 函数拆分允许您使用正则表达式: 例如:

    var str = "I am confused";
    str.split(/\s/g)
    

    Str 则包含 ["I","am","confused"]

    【讨论】:

      【解决方案4】:

      分隔符 指定用于分隔字符串的字符。分隔符被视为字符串或正则表达式。如果省略分隔符,则返回的数组包含一个由整个字符串组成的元素。如果 separator 为空字符串,则 str 转换为字符数组。

      请查看以下链接以了解更多信息,希望对您有所帮助:

      String.prototype.split()

      【讨论】:

        猜你喜欢
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多