我正在编写一个程序,在执行时应该根据用户输入选择两个数组中的一个,然后将该数组中的随机变量打印到控制台。
当程序运行时,当我将arrayOneSelect
输入shell提示符时,它会正确打印出no
。但是,当我在shell提示符中输入yes
时,arrayTwoSelect
不会打印。相反,程序选择输入no
的条件并打印arrayOneSelect
。当我输入其他内容时,同样的事情发生 - 程序仍然选择第一个条件并打印arrayOneSelect
。
谁能告诉我为什么会这样?
var arrayOne= ["Hello", "Goodbye", "How are you?", "What's happening?", "See you later"];
var arrayTwo= ["Dog", "Cat", "Duck", "Goose"];
var arrayOneSelect= arrayOne[Math.floor(Math.random() * (arrayOne.length))];
var arrayTwoSelect= arrayTwo[Math.floor(Math.random() * (arrayTwo.length))];
var select= prompt("Ready for an adventure?");
if(select= "no") {
console.log(arrayOneSelect);
}
else if(select= "yes") {
console.log(arrayTwoSelect);
}
else {
console.log("Try again!");
}
答案 0 :(得分:4)
您需要使用double或triple equals进行比较。在这种情况下,双等于将,因为它们是相同的类型。
但是,最好使用三等于,因为它不会尝试转换类型。请参阅:JavaScript Comparison Operators
试试这个:
var select= prompt("Ready for an adventure?");
if(select === 'no') {
console.log(theKicker);
}
else if(select === 'yes') {
console.log(fieldGoal);
}
else {
console.log("That's not the way! Try again!");
}
你的代码没有按预期工作的原因是因为一个等于用于赋值,而在javascript中一个非null变量是真实的,所以你只是碰到你的第一个if语句。
答案 1 :(得分:3)
你的if语句分配给变量,而不是检查它。
你想做if(select == 'no')
当您执行if(select = 'no')
时,您将'no'
分配给select
var,并在javascript中分配任何非null
,undefined
或{{1}的内容是真实的(意思是它被解释为false
)
虽然在这种情况下true
没问题,但最佳做法是==
使用Equality comparisons and sameness
答案 2 :(得分:2)
您的if
和else if
语句目前尚未检查进行比较。单个=
用于变量赋值。也就是说,您将select
设置为等于"no"
和"yes"
。
如果要实际检查比较,则需要使用三等于进行比较。这是更新的代码:
var arrayWoes = ["Ah what a buzzkill", "How dare you", "You are the worst", "I fart in your general direction", "How about you get out of town"];
var arrayYes = ["You marvelous user", "You must be pretty great. Welcome to the fold.", "You are true of heart and steady of mind", "You're just a good one, aren't you?"];
var theKicker = arrayWoes[Math.floor(Math.random() * (arrayWoes.length))];
var fieldGoal = arrayYes[Math.floor(Math.random() * (arrayYes.length))];
var select = prompt("Ready for an adventure?");
if(select === "no") {
console.log(theKicker);
}
else if(select === "yes") {
console.log(fieldGoal);
}
else {
console.log("That's not the way! Try again!");
}
我还建议你为变量赋值给变量和equals运算符之间的空格。编写一致的干净,易懂的代码通常是一种很好的做法。