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では、偽の値と評価される値はごくわずかであるため、負の値はと評価されtrueます。

ブール値の結果を実際に得るには、次のようになります。

if( !!~res ) { }

この場合も、これは実際には必要ありません。

を使用して「正しい」結果を取得するためにはるかに頻繁に使用される方法.indexOf()(配列についても同じです)は、結果がより大きいかどうかを確認することです。-1

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

その正しいindexOfは、あなたが言及した文字列の開始インデックスを返します.yは0を返します。文字列が存在しない場合は-1を返します

サンプルの例 var sample= "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 に答える