1

我有一个函数,其中包含一个 switch 语句,用于根据输入的整数返回一个字符串。为了简洁起见,我将其缩短了。过去的案例1无关紧要,因为案例整数只是递增并返回不同的字符串值。设置是一样的。

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

每当我使用 Google Chrome 控制台对其进行测试时,它都能正常工作。

idToGame(1)返回loz

所以让我们以变量game为例。下面,我们假设“pm_game”的值为 1。

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

因此,game设置为1

这是奇怪的部分。每当我尝试使用它时:(注意:下面的值为 1

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

它设置gameundefined

我错过了什么吗?当它真的应该是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

javascript 中的开关使用严格的类型检查 ( ===),因此1(Number) 被认为不等于'1'(String)。两种选择:

  • 尝试switch(parseInt(id))执行从字符串到整数的转换。
  • 如果您不想执行转换,只需在每个案例值周围添加引号,如下所示:case '1'

另外,出于调试目的,您可以使用typeof在控制台中打印类型。

于 2013-03-02T07:45:49.427 回答
1

Switch 使用 === 运算符。其中 1 不等于“1”。

刚刚在控制台中尝试过,您需要尝试解析它。下面是一个例子。

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 回答