根据Is JavaScript a pass-by-reference or pass-by-value language?,JavaScript按值传递字符串对象。因此,调用indexOf方法将触发复制内容。

就我而言,我正在解析一个大字符串以查找数据。我大量使用indexOf查找数据。字符串可以长达100-200KB,每次完整扫描我最多可能需要调用indexOf 1000次。

恐怕这会导致不必要的复制字符串污染“内存”,并可能影响性能。

我的结论正确吗?如果是这样,处理我的任务的正确方法是什么?

潜在地,我可以使用正则表达式,但此刻看起来太复杂了。

最佳答案

字符串是Javascript中的一种奇怪的野兽,它们似乎位于原始类型和对象之间的中间地带。从技术上讲,它们被认为是原始的,但由于它们的不变性,在很多情况下都可以将它们视为参考。

考虑到它们是不可变的,如果将字符串的副本传递给任何函数,我会感到非常惊讶,因为这既昂贵又完全不必要。

一种看似简单的查找方法是将字符串传递给函数并更改其字符之一,以查看返回时是否反映在原始字符串中。但是,如上所述,字符串的不变性使之成为不可能。



通过在数百万次循环中对两个字符串之一执行indexOf("a"),可以间接测试该字符串。

要搜索的字符串为"a""a very long string containing many thousands of characters ..."

如果字符串是通过引用传递的,则时间应该没有明显差异。按值传递应该是可检测的,因为您必须将字符串复制数百万次,而短字符串的复制速度要比长字符串的复制速度快。

但是,正如我所说,由于引擎很可能已尽可能优化,因此可能没有必要。

关于javascript - 'indexOf'方法性能优化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29838311/

10-12 19:01