Javascripts String.split-它在内部是如何工作的?

Javascripts String.split-它在内部是如何工作的?,javascript,internals,Javascript,Internals,我最近与一位同事讨论了JavaScript如何在内部处理String.split的分隔符 分隔符是否总是转换为正则表达式?例如,调用String.split(“,”,myvar)是否将“,”转换为与该字符串匹配的常规表达式?是的,javascript函数split允许您使用正则表达式: 例: Str然后包含[“I”、“am”、“fuzzed”]分隔符指定用于分隔字符串的字符。分隔符被视为字符串或正则表达式。如果省略分隔符,则返回的数组包含一个由整个字符串组成的元素。如果分隔符是空字符串,则str

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


分隔符是否总是转换为正则表达式?例如,调用
String.split(“,”,myvar)
是否将
“,”
转换为与该字符串匹配的常规表达式?

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


Str然后包含[“I”、“am”、“fuzzed”]

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

请参阅下面的链接了解更多信息,希望对您有所帮助:

以下是答案,但相关部分围绕本节展开:

8.如果separator是一个RegExp对象(它的[[Class]]是“RegExp”),让R=separator;否则,设R=ToString(分隔符)

也就是说,这是ecma规范,正如Anthony Grist在评论中提到的,浏览器可以根据需要实现,例如V8实现ecma262


编辑:扩展了浏览器/js引擎实现的思路,看来ecma的大多数实现版本,

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


这完全取决于执行情况。例如,如果您查看WebKit实现(查找stringProtoFuncSplit),您会发现它并不总是转换为正则表达式。然而,这并不意味着什么,它只是一个实现问题

JavaScript规范概述了给定输入序列的必要输出,但没有指定任何具体的实现。这意味着浏览器在实现规范时,只要结果与规范相匹配,就可以随心所欲地进行操作。基本上:无论它在内部如何工作,也不能保证它在不同浏览器之间保持一致。谢谢,这是我一直在寻找的答案!
var str = "I am confused";
str.split(/\s/g)