1

入力された整数に基づいて文字列を返す switch ステートメントを含む関数があります。簡潔にするために短くしました。ケースの整数は単に増加し、異なる文字列値を返すため、過去のケース1は問題ではありません。セットアップは同じです。

function idToGame(id) { switch (id) { case 1: return 'loz';break; } }

Google Chrome コンソールを使用してテストすると、問題なく動作します。

idToGame(1)ロズを返します

gameそれでは、例として変数を使用しましょう。以下では、「pm_game」の値が 1 であると想定しています。

var game = document.getElementById('pm_game').value;

したがって、は1gameに設定されます。

ここが奇妙な部分です。これを使用しようとするたびに: (注: 以下の値は 1 です)

var game = idToGame(document.getElementById('pm_game').value);

undefinedに設定gameします。

何か不足していますか?本当にlozであるはずなのに、なぜ未定義になるのですか?

4

3 に答える 3

3

次のように、任意の入力フィールドの値を取得する場合:

var game = document.getElementById('pm_game').value;

返される結果は、期待どおりの数値ではなく、常に文字列です。したがって、それを機能させるには、文字列を数値にキャストする必要があります。たとえば、次を使用しparseIntます。

var game = parseInt(document.getElementById('pm_game').value, 10);
// or game = + document.getElementById('pm_game').value;
// or game = Number(document.getElementById('pm_game').value);

または、スイッチの前にparseInt変換をid2game関数に移動します。

于 2013-03-02T07:50:39.097 に答える
1

Switch は === 演算子を使用します。ここで、1 は「1」と等しくありません。

コンソールで試したところ、tryparse が必要です。以下は例です。

var f = function(id) { 
   switch (parseInt(id)) 
   { 
      case 1: 
         return 'loz';
         break; 
   } 
}

古い関数: f(1) は 'loz' を返しますが、f('1') は返しません。

解析を避けるために、1 ではなく '1' と比較することをお勧めします。しかし、これがあなたが望むものかどうかはわかりません:

var f = function(id) { 
   switch (id) 
   { 
      case '1': 
         return 'loz';
         break; 
   } 
}
于 2013-03-02T07:49:43.843 に答える
1

JavaScript のスイッチは厳密な型チェック ( ===) を使用するため、 (Number) は(String)1と等しくないと見なされます。'1'2 つのオプション:

  • switch(parseInt(id))文字列から整数への変換を実行してみてください。
  • 変換を実行したくない場合は、次のように各ケースの値を引用符で囲みますcase '1'

さらに、デバッグ目的typeofで、コンソールにタイプを出力するために使用できます。

于 2013-03-02T07:45:49.427 に答える