为什么';我的javascript if语句是否以数组为目标?

为什么';我的javascript if语句是否以数组为目标?,javascript,jquery,html,arrays,if-statement,Javascript,Jquery,Html,Arrays,If Statement,当我在提示符中输入弓箭手、骷髅或气球时,它只显示else alert语句。我不确定我做错了什么,为什么if不以阵列为目标?有人能解释一下或者给点建议吗 多谢各位 带脚本的HTML: 挑战1 风险价值成本; 名称成本=[3,6,7]; 变量名称列表; 姓名列表=[“弓箭手”、“斯巴基”、“佩卡”] var question=prompt('您的卡名是什么?'); if(question.value==名称列表[0]) { 警报('您的姓名成本为'+nameCost[0]); } else if

当我在提示符中输入弓箭手、骷髅或气球时,它只显示else alert语句。我不确定我做错了什么,为什么if不以阵列为目标?有人能解释一下或者给点建议吗

多谢各位

带脚本的HTML:


挑战1
风险价值成本;
名称成本=[3,6,7];
变量名称列表;
姓名列表=[“弓箭手”、“斯巴基”、“佩卡”]
var question=prompt('您的卡名是什么?');
if(question.value==名称列表[0])
{
警报('您的姓名成本为'+nameCost[0]);
}
else if(question.value==名称列表[1])
{
警报('您的姓名成本为'+nameCost[1]);
}
else if(question.value==名称列表[2])
{
警报('您的姓名成本为'+nameCost[2]);
}否则{
警报(“您的姓名和卡不可用”);
}

变量没有
属性。直接使用
问题


挑战1
风险价值成本;
名称成本=[3,6,7];
变量名称列表;
姓名列表=[“弓箭手”、“斯巴基”、“佩卡”]
var question=prompt('您的卡名是什么?');
如果(问题==姓名列表[0])
{
警报('您的姓名成本为'+nameCost[0]);
}
else if(问题==姓名列表[1])
{
警报('您的姓名成本为'+nameCost[1]);
}
else if(问题==姓名列表[2])
{
警报('您的姓名成本为'+nameCost[2]);
}否则{
警报(“您的姓名和卡不可用”);
}

变量没有
属性。直接使用
问题


挑战1
风险价值成本;
名称成本=[3,6,7];
变量名称列表;
姓名列表=[“弓箭手”、“斯巴基”、“佩卡”]
var question=prompt('您的卡名是什么?');
如果(问题==姓名列表[0])
{
警报('您的姓名成本为'+nameCost[0]);
}
else if(问题==姓名列表[1])
{
警报('您的姓名成本为'+nameCost[1]);
}
else if(问题==姓名列表[2])
{
警报('您的姓名成本为'+nameCost[2]);
}否则{
警报(“您的姓名和卡不可用”);
}

提示符将保存输入到
问题
变量的值。因此,当与问题交互时,您不需要
问题.value
。只需
question

提示符将保存输入
question
变量的值。因此,在与question交互时,您不需要
question.value
。只是
问题

不是
问题。值
只是
问题

否则,解决此问题的更好方法是使用查找表

var cost_table = {
    'Archers':3,
    'Sparky':6,
    'Pekka':7
}

var name = prompt('What is your card name?')
var cost = cost_table[name]
if( cost ){
    alert('Your name cost is ' + cost )
}else{
    alert('Cost for ' + name + ' available ')
}

这不是
问题。值
只是
问题

否则,解决此问题的更好方法是使用查找表

var cost_table = {
    'Archers':3,
    'Sparky':6,
    'Pekka':7
}

var name = prompt('What is your card name?')
var cost = cost_table[name]
if( cost ){
    alert('Your name cost is ' + cost )
}else{
    alert('Cost for ' + name + ' available ')
}

我个人会将您的代码重构为一个对象,使其更易于使用,并删除一些重复的代码

您最大的问题是试图访问代码中的
question.value
,这是不正确的
prompt()
只是将输入变量的内容作为字符串赋值,因此您应该检查just
question

对于其余部分:一个基本的编码原则是,您不想在代码中重复自己(许多人称之为“干-不要重复自己”),在这种情况下,您通过使用多个带有重复指令的
if()
语句(
alert(…)
)重复了很多次。例如,在下面的代码中,请注意if语句的每个部分的内容几乎是相同的。所有更改都是您正在调用的数组索引

if (question == nameList[0])
  {
    alert('Your name cost is ' + nameCost[0]);
  }
  else if (question== nameList[1])
  {
    alert('Your name cost is ' + nameCost[1]);
  }...
相比之下,我在下面提供的代码对于所有可接受的情况只有一条if语句,对于未找到值的情况,只有一条catch all-else语句


挑战1
变量名称成本={
“弓箭手”:3,
"Sparky":6,,
“佩卡”:7
};
var question=prompt('您的卡名是什么?');
if(nameCost.hasOwnProperty(问题)){
警报('您的成本为:'+nameCost[问题]);
}否则{
警报(“找不到您的成本”);
}

我个人会将您的代码重构为一个对象,使其更易于使用,并删除一些重复的代码

您最大的问题是试图访问代码中的
question.value
,这是不正确的
prompt()
只是将输入变量的内容作为字符串赋值,因此您应该检查just
question

对于其余部分:一个基本的编码原则是,您不想在代码中重复自己(许多人称之为“干-不要重复自己”),在这种情况下,您通过使用多个带有重复指令的
if()
语句(
alert(…)
)重复了很多次。例如,在下面的代码中,请注意if语句的每个部分的内容几乎是相同的。所有更改都是您正在调用的数组索引

if (question == nameList[0])
  {
    alert('Your name cost is ' + nameCost[0]);
  }
  else if (question== nameList[1])
  {
    alert('Your name cost is ' + nameCost[1]);
  }...
相比之下,我在下面提供的代码对于所有可接受的情况只有一条if语句,对于未找到值的情况,只有一条catch all-else语句


挑战1
变量名称成本={
“弓箭手”:3,
"Sparky":6,,
“佩卡”:7
};
var question=prompt('您的卡名是什么?');
if(nameCost.hasOwnProperty(问题)){
警报('您的成本为:'+nameCost[问题]);
}否则{
警报(“找不到您的成本”);
}

这里有一个更简单的版本,以防万一:


挑战1
风险价值成本;
名称成本=[3,6,7];
变量名称列表;
姓名列表=[“弓箭手”、“斯巴基”、“佩卡”]
var question=prompt('您的卡名是什么?');
提醒('您的姓名成本为'+nameCost[nameList.indexOf(问题)]);

这里有一个更简单的版本,以防万一:


挑战1
变量名