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

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

haystack.startsWith(needle) == true

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


当前回答

可以使用ECMAScript 6的String.product.startsWith()方法。所有主要浏览器都支持它。但是,如果您想在不受支持的浏览器中使用它,则需要使用shim/polyfill将其添加到这些浏览器中。创建一个符合规范中列出的所有细节的实现有点复杂。如果您想要一个忠实的垫片,请使用以下任一方法:

Matthias Bynens的String.prototype.startsWith垫片,或es6垫片,尽可能多地垫片es6规格,包括String.prototype.startsWith。

一旦你填充了这个方法(或者如果你只支持已经有它的浏览器和JavaScript引擎),你可以这样使用它:

console.log(“Hello World!”.startsWith(“He”));//真的var haystack=“你好世界”;var前缀='orl';console.log(haystalk.startsWith(前缀));//假的

其他回答

如果使用startsWith()和endsWith),则必须小心前导空格。下面是一个完整的示例:

var str1 = " Your String Value Here.!! "; // Starts & ends with spaces    
if (str1.startsWith("Your")) { }  // returns FALSE due to the leading spaces…
if (str1.endsWith("Here.!!")) { } // returns FALSE due to trailing spaces…

var str2 = str1.trim(); // Removes all spaces (and other white-space) from start and end of `str1`.
if (str2.startsWith("Your")) { }  // returns TRUE
if (str2.endsWith("Here.!!")) { } // returns TRUE

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

http://stringjs.com/

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

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

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

npm install string

然后要求它作为S变量:

var S = require('string');

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

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

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

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

使用.lastIndexOf的另一种选择:

haystack.lastIndexOf(needle) === 0

这将在干草堆中向后查看针的出现情况,从干草堆的索引字符串长度开始返回到零。换句话说,它只检查大海捞针是否开始。lastIndexOf提供了第二个可选参数“fromIndex”。如果给定,则反向搜索从该给定索引位置开始,并返回索引零。但是我们不能指定除最后一个索引之外的任何其他fromIndex,否则搜索可能会忽略某些内容。

原则上,这应该比其他一些方法具有性能优势:

它不会搜索整个干草堆。它不会创建新的临时字符串,然后立即丢弃它。