如何在JavaScript中编写与C#的String.StartsWith等效的代码?

var haystack = 'hello world';
var needle = 'he';

haystack.startsWith(needle) == true

注意:这是一个老问题,正如ECMAScript 2015(ES6)在评论中指出的那样,引入了.startsWith方法。然而,在编写此更新(2015年)时,浏览器支持还远未完成。


当前回答

var str = 'hol';
var data = 'hola mundo';
if (data.length >= str.length && data.substring(0, str.length) == str)
    return true;
else
    return false;

其他回答

我刚刚了解了这个字符串库:

http://stringjs.com/

包括js文件,然后像这样使用S变量:

S('hi there').endsWith('hi there')

它也可以通过安装在NodeJS中使用:

npm install string

然后要求它作为S变量:

var S = require('string');

如果你不喜欢这个字符串库的话,这个网页也有指向其他字符串库的链接。

根据这里的答案,这是我现在使用的版本,因为它似乎基于JSPerf测试提供了最好的性能(据我所知,它在功能上是完整的)。

if(typeof String.prototype.startsWith != 'function'){
    String.prototype.startsWith = function(str){
        if(str == null) return false;
        var i = str.length;
        if(this.length < i) return false;
        for(--i; (i >= 0) && (this[i] === str[i]); --i) continue;
        return i < 0;
    }
}

这是基于此处的startsWith2:http://jsperf.com/startswith2/6.我添加了一个小的调整,以实现微小的性能改进,此后还添加了一项检查,以检查比较字符串是否为空或未定义,并使用CMS答案中的技术将其转换为添加到字符串原型中。

注意,这个实现不支持Mozilla开发者网络页面中提到的“position”参数,但这似乎并不是ECMAScript建议的一部分。

data.substring(0, input.length) === input

我只是想补充一下我对此的看法。

我想我们可以这样使用:

var haystack = 'hello world';
var needle = 'he';

if (haystack.indexOf(needle) == 0) {
  // Code if string starts with this substring
}

还可以查看underscore.string.js。它提供了一系列有用的字符串测试和操作方法,包括startsWith方法。从文档中:

startsWith_.startsWith(字符串,开始)此方法检查字符串是否以start开头。_(“image.gif”).startsWith(“image”)=>真