JavaScript endsWith函数不工作
我有一个web应用程序。在其中一个页面中,我检查了所有HTML元素ID,无论其中一个是否以指定字符串结尾。每个JS函数都在页面上工作,但“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)。您可以从以下
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("$"));