3

我试图找出一个字符串是否存在,如下所示:

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。

是什么赋予了?

4

2 回答 2

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运算符将从字节中取反每个位,以及用于确定值是正数还是负数的额外位。因此,由于在 ECMAscript 中只有很少的值被评估为falsy values,因此负值将评估为true

要真正得到布尔结果,它看起来像

if( !!~res ) { }

在这种情况下,这又不是真正必要的。

使用(数组也是如此)获得“正确”结果的更常用的做法.indexOf()是检查结果是否大于-1

if( res > -1 ) { }
于 2013-02-28T11:35:22.720 回答
0

是的,它的正确 indexOf 将返回您提到的字符串的起始索引,即 y 它给出 0。如果字符串不存在,则返回 -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
于 2013-02-28T11:46:11.000 回答