Javascript函数未返回所需结果

Javascript functions not returning desired result

本文关键字:结果 返回 函数 Javascript      更新时间:2023-09-26

我有一个函数,它包含一个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设置为未定义的。

我是不是错过了什么?当它真的应该是loz时,为什么它会变成未定义

当您获得任何输入字段的值时,如下所示:

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功能。

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; 
   } 
}
javascript中的开关使用严格的类型检查(===(,因此1(Number(被认为不等于'1'(String(。两种选择:
  • 尝试switch(parseInt(id))执行从字符串到整数的转换
  • 如果您不想执行转换,只需在每个大小写值周围添加引号,如下所示:case '1'

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