今天在写搜索功能的时候,发现在拿用户输入的内容和数据库的数据进行匹配的时候,出现了一个奇怪的现象,当用户什么也不输入的时候,居然匹配到了所有的数据,代码如下:
function LoadItem(ItemValue) {
var html = [];
for (i = 0; i < allHeroList.length; i++) {
var ItemName = allHeroList[i].yxmc_b4;
if (ItemName.indexOf(ItemValue) != "-1") {
html.push( '<li><a href="'+allHeroList[i].jsglxqylj_90+'"><img src="'+allHeroList[i].yxtx_2b+'" width="74" height="74" alt="英雄"><em>'+allHeroList[i].yxmc_b4+'</em></a></li>');
}
}
if (html.length == 0) {
$(".role").html(" ");
return;
}
$(".role").html(html.join(""));
}
*经过调试发现,并不是代码写的有问题,而是空字符串和所有的字符串都匹配,这让我百思不得其解,为了验证,去查看了 MDN
文档给出的解释如下:
"Blue Whale".indexOf("", 10); // returns 10
经过思考,我觉得这样设计在逻辑上是很合理的,原因如下:(备注:下文中 长度为 0
的字符串 和 空字符串 是同一个意思,都表示长度为0
的字符串)
- 字符与字符之间的间隔,就相当于长度为
0
的字符串; - 因为从逻辑上来说,长度为
0
的字符串应该包含空字符串;既然长度为0
的字符串都包含空字符串了,那么长度大于0的字符串更应该包含空字符串。