我试图找出一个字符串是否存在如此:
var test1 = '{"packageId":"1","machineId":"1","operationType":"Download"},{"packageId":"2","machineId":"2","operationType":"Download"}';
alert("found: " + test1.indexOf('{"packageId":"1","machineId":"1","operationType":"Download"}', 0));
但是,结果始终为0.
是什么给了什么?答案 0 :(得分:7)
以防这不是一个笑话......
String.prototype.indexOf
返回目标字符串中匹配字符串的出现,因为您只是查找该行的第一个出现,它正确地返回零。
如果您修改搜索字符串(例如使用一些随机字母),则会得到-1
,因为它无法找到。
使用二进制非运算符有一种做法,几乎将.indexOf()
的结果降为布尔表达式。这看起来像
var res = test1.indexOf('{"packageId":"1","machineId":"1","operationType":"Download"}');
if( ~res ) {
// we have a match
} else {
// no match at all
}
没有详细说明, not -operator将从一个字节中取消每个位,也用额外位来确定该值是正数还是负。因此,由于在ECMAscript中只有极少数值被评估为虚假值,因此负值将评估为true
。
要真正拥有布尔结果,它看起来像
if( !!~res ) { }
在这种情况下再次不是必要的。
使用.indexOf()
获得“正确”结果的常用做法(对于数组来说也是如此),是检查结果是否大于-1
if( res > -1 ) { }
答案 1 :(得分:0)
你的正确indexOf将返回你提到的字符串的起始索引,即y给出0.如果string不存在则返回-1
一些示例示例 var sample =“welcome to javascript”;
alert ( sample.indexOf("welcome",0)); // return 0
alert ( sample.indexOf("come",0)); // return 3
alert ( sample.indexOf("came",0)); // return -1
alert ( sample.indexOf("javascript",0)); // return 11
匹配:
if(sample.indexOf("welcome",0)>-1)
alert("match");
else
alert("Not match")l