JavaScript在对象之间传递值
当我在提示0下输入时,我预期会出现“停止”警报,但会收到“开始”警报。你能帮我得到“停止”警报吗JavaScript在对象之间传递值,javascript,object,Javascript,Object,当我在提示0下输入时,我预期会出现“停止”警报,但会收到“开始”警报。你能帮我得到“停止”警报吗 var丰田={ 制造:“丰田”, 型号:“花冠”, 燃料:0, 油箱:功能(添加燃油){ this.fuel=this.fuel+addingfuel; }, 开始:函数(){ 如果(this.fuel==0){ 警报(“停止”); }否则{ 警惕(“围棋”); } }, }; var addingfuel=提示(“请输入添加的燃油”、“升”); 丰田。坦克(); toyota.start()您必
var丰田={
制造:“丰田”,
型号:“花冠”,
燃料:0,
油箱:功能(添加燃油){
this.fuel=this.fuel+addingfuel;
},
开始:函数(){
如果(this.fuel==0){
警报(“停止”);
}否则{
警惕(“围棋”);
}
},
};
var addingfuel=提示(“请输入添加的燃油”、“升”);
丰田。坦克();
toyota.start()
您必须通过添加燃油
和油箱(添加燃油)
功能,否则添加燃油
包含未定义的,因此最后它将显示前进,而不是停止
N.B添加燃料的addingfuel
的值是字符串,因此您必须像这样将其转换为整数parseInt(addingfuel)
否则您的this.fuel==0
条件将失败
让我们这样试试
var丰田={
制造:“丰田”,
型号:“花冠”,
燃料:0,
油箱:功能(添加燃油){
this.fuel=this.fuel+parseInt(addingfuel);
},
开始:函数(){
如果(this.fuel==0){
警报(“停止”);
}否则{
警惕(“围棋”);
}
},
};
var addingfuel=提示(“请输入添加的燃油”、“升”);
丰田。油箱(添加燃油);//你需要通过这个,否则它是未定义的
toyota.start()代码>窗口。提示符
将字符串类型作为返回值返回。这就是为什么当您将燃油添加到添加燃油(字符串)时,结果是“00”
,并且您的状况失败
为了克服这个问题,您应该在使用该值之前将字符串强制转换为数字
tank: function(addingfuel) {
var numberValue = parseFloat(addingfuel, 10);
numberValue = isNaN(numberValue) ? 0 : numberValue
this.fuel = this.fuel + numberValue;
}
你需要稍微修改一下你的代码
var toyota = {
make: "Toyota",
model: "Corolla",
fuel: 0,
tank: function(addingfuel) {
this.fuel = this.fuel + (addingfuel || 0);
},
start: function() {
if (this.fuel === 0) {
alert("stop");
} else {
alert("go");
}
},
};
解释
当您在调用toyota.tank()时未传递任何内容时,这将把参数视为未定义,并在未定义后附加一个数字,这将为您提供NaN
0 + undefined
如果您更改此代码,它将正常工作
this.fuel = this.fuel + addingfuel;
到
Prompt返回一个字符串。1、转换为数字:+添加燃油代码>2。通过它toyota.油箱(+添加燃油)代码>var addingFuel与参数功能(addingFuel)完全分离。两个完全独立的不相关变量恰好具有相同的名称。this.fuel+=numberValue;;)@是的,那更好。谢谢
this.fuel = this.fuel + (addingfuel || 0);