0

次のコード スニペットがあります。

return (AllowableCharacters.indexOf(String.fromCharCode(k)) != -1);

さて、このスクリプトでの -1 の使い方がよくわかりません。

スクリプトの読み取り方法は次のとおりです。

first String.fromCharCode(k) != -1実行されます(kはキーコードです。他のスクリプトから動的に取得しています)。

次に、AllowableCharacters から indexof(String.fromCharCode(k) != -1) を取得します。

これは、次のような文字列です。

AllowableCharacters = "abc" ; 

また、indexof が上記の文字列で値を見つけられない場合、-1 が返されることも理解しています。

私の質問に戻りますが、スクリプトの -1 はなぜですか?

編集 ::

私の質問を簡単にするために、次の行をどのように読みますか :

String.fromCharCode(k))!=-1

簡単な平易な英語で。

編集2::

わかりましたので、グッファの答えを読んで、チェックするランダムなスクリプトを作成しました。スクリプトは次のとおりです。

 var store = "abcdefgpS";

        function check_index(){
            console.log(store.indexOf(String.fromCharCode(83))); 
        };

上記の関数では !-1 が除外されるため、console.log では、一致が見つかった場合はその文字が見つかった indexOf を取得し、一致が見つからない場合は -1 を取得します。

今、それは私たちが望むものではなく、私たちが望むのは、「値がそこにあるかどうかを教えてください」(trueを返す)または「値がそこにないかどうかを教えてください」(falseを返します)です。

したがって、上記のスクリプトを次のように変更します。

 var store = "abcdefgpS";

        function check_index(){
            console.log(store.indexOf(String.fromCharCode(83)) !-1); 
        };

これは、あなたに真または偽の値を与えます。

今どのように:

return (store.indexOf(String.fromCharCode(83)) !-1)

読み方:

if (store.indexOf(String.fromCharCode(83)) !-1){
      return true;
}else { return false; } 

に if 文がありません。 return (store.indexOf(String.fromCharCode(83)) !-1);

ありがとうございました、

アレクサンダー

4

2 に答える 2

2

これは、文字が許可されているかどうかを検証する条件です。boolean(比較の結果)を返します。

分解してみましょう。

  1. まず、 を使用して char コードから文字列を取得しますString.fromCharCode。おそらく、何らかの入力イベントからこれを受け取ったのでしょう。
  2. 次に、この結果の単一文字列のインデックスをAllowableCharactersusingで取得しますindexOf
  3. 最後に、その結​​果が であるかどうかをテストし-1ます。テストは値に評価され、boolean他の値と同様に関数から返すことができます。の値は、その文字が許可されていないことを示しているため、文字が有効かどうかを判断する-1ために使用します。!=
于 2015-01-26T00:38:31.183 に答える
1

実行順序を間違えました。

最初にこの式が評価されます: String.fromCharCode(k).

結果が string であると仮定しましょう"b"。これは次の式で使用されますAllowableCharacters.indexOf("b")

キャラクターが文字列の 2 番目の文字 (インデックス 1 を持つ) にあると仮定すると、結果は になり1ます。それは式で使用されます1 != -1

1と等しくないため-1、結果はtrueであり、これが返されます。

つまり、何も見つからない場合にメソッドが戻るため、メソッド-1の結果と比較されます。indexOf-1


!=値をtrueorにするのは比較演算子ですfalse。値を比較し、結果はそれらが等しいかどうかによって異なります。if結果をtrueorに変換するためのステートメントは必要ありませんfalse。これは既に比較式の値です。

次のようなコードが表示されることがあります。

if (AllowableCharacters.indexOf(String.fromCharCode(k)) != -1) {
  return true;
} else {
  return false;
}

そのifような場合、ステートメントは不要です。ステートメント内の式ifはすでにtrueorfalseであるため、直接返すことができます。

return AllowableCharacters.indexOf(String.fromCharCode(k)) != -1;
于 2015-01-26T00:53:13.463 に答える