JavaScript endsWith函数不工作

JavaScript endsWith函数不工作,javascript,Javascript,我有一个web应用程序。在其中一个页面中,我检查了所有HTML元素ID,无论其中一个是否以指定字符串结尾。每个JS函数都在页面上工作,但“endsWith”函数不工作。我真的不明白这件事。有人能帮忙吗 var str = "To be, or not to be, that is the question."; alert(str.endsWith("question.")); 上述简单的JS代码根本不起作用?ES5没有endsWith函数(或者,就此而言,startsWith)。您可以从以下

我有一个web应用程序。在其中一个页面中,我检查了所有HTML元素ID,无论其中一个是否以指定字符串结尾。每个JS函数都在页面上工作,但“endsWith”函数不工作。我真的不明白这件事。有人能帮忙吗

var str = "To be, or not to be, that is the question.";
alert(str.endsWith("question."));

上述简单的JS代码根本不起作用?

ES5没有
endsWith
函数(或者,就此而言,
startsWith
)。您可以从以下位置推出自己的版本:


我从未在JS中见过带有函数的
endsWith。您可以执行String.length,然后通过手动引用要检查的每个字符来检查最后的单词

更好的方法是使用正则表达式查找字符串中的最后一个单词,然后使用它()。

如本文所述

如果以提供的后缀结尾,则返回true

编辑

在检查之前,有一个类似的问题

答案是

var str = "To be, or not to be, that is the question$";
String.prototype.endsWith = function(suffix) {
    return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
alert(str.endsWith("$"));
我在Chrome控制台中找到了
endsWith()
函数,但奇怪的是,在VS代码(使用Chrome)中调试时没有定义该函数。您可以尝试通过删除多边形填充来编辑下面的代码段,以查看浏览器是否支持该代码段

这是一段引自:

String.prototype.endsWith() 此方法已添加到ECMAScript 6规范中,并且可能 尚未在所有JavaScript实现中可用。然而,你 可以使用以下代码段填充String.prototype.endsWith():

//如果未定义string.endsWith(),请多填充它。
if(!String.prototype.endsWith){
String.prototype.endsWith=函数(搜索,此项){
if(this_len==未定义| | this_len>this.length){
这个长度=这个长度;
}
返回this.substring(this_len-search.length,this_len)==search;
};
}
//使用它。
const myString=“Mayberry”;
const result=myString.endsWith(“berry”)?'是:'不';
document.body.append('A.'+结果)

Q.Mayberry是否以“berry”结尾?
这个问题到底与JSF有什么关系?您是否暗示,当您删除所有JSF内容(并使用普通的
.html
页面)时,这个问题就会消失?这令人难以置信,因为JSF实际上并没有在webbrowser中运行,而是在webserver中运行。我将编辑您的问题,以消除不相关的JSF噪音。对于您的问题,请仔细阅读的浏览器兼容性列表。对于未来的问题,请更仔细地确定问题。冷静@BalusC!JSF有一个名为
endsWith
的函数。很明显,提问者感到困惑,请看。在问题中加入JSF确实很有帮助,因此我们可以说他们混淆了JSF和JavaScript的功能。@BalusC-我是说nudastack被混淆了,而不是我,他给了我们一个机会帮助他/她,而不是嘲笑他。在回答之前停下来想一分钟,我是说包含JSF标签暗示提问者混淆了JSF和JS。我知道我在说什么。由于你的态度,你误读或故意误读了我的评论。我不打算再花更多的精力去找出是哪一个。很明显,我们之间存在着沟通问题,不值得花那么多精力去解决它们。不是我在努力把英语写清楚,就是你在努力准确地理解它。我并不是说上面的代码是JSF。我并不是说有一个
endsWith
函数是JavaScript。我并不是说可以从JS调用JSF函数。我没有混淆它们各自的执行上下文。我在努力理解这个问题,而不是侮辱左右中间的人。我是来帮忙的。我不会继续这段对话。奇怪的是,他们会使用
lastIndexOf
而不仅仅是
子字符串。如果针在字符串中出现两次呢?
substring
会在这种情况下工作吗?@DanTao这是因为他们版本的endsWith的语义。第二个参数(位置)被描述为“在这个字符串中搜索,就好像这个字符串只有这么长一样;默认为这个字符串的实际长度,钳制在这个字符串的长度所确定的范围内。”,这仍然需要进行第二次检查。@Joe您可以执行类似于
str.substring(str.length-needle.length)
,为了避免这个问题,可以省略可枚举、可配置和可写,因为它们在默认情况下都为false,请使用后缀“$”测试您的解决方案。它将被视为正则表达式,因此,即使字符串
“To be,or not be,这就是问题所在。”
也会匹配。这取决于使用目的,否则您可以添加检查
$
var str = "To be, or not to be, that is the question.";
function strEndsWith(str, suffix) {
    return str.match(suffix+"$")==suffix;
}
alert(strEndsWith(str,"question."));
var str = "To be, or not to be, that is the question$";
String.prototype.endsWith = function(suffix) {
    return this.indexOf(suffix, this.length - suffix.length) !== -1;
};
alert(str.endsWith("$"));