Javascript函数没有返回所需的结果

时间:2013-03-02 07:35:18

标签: javascript ajax undefined

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

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

每当我使用我的谷歌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);

它将game设置为 undefined

我错过了什么吗?当它真的应该是 loz 时,它为什么会变成 undefined

3 个答案:

答案 0 :(得分: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功能。

答案 1 :(得分:1)

javascript中的切换使用严格类型检查(===),因此,1(Number)被认为不等于'1'(String)。两个选项:

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

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

答案 2 :(得分: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; 
   } 
}