我有一个函数,它包含一个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 ?
答案 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;
}
}