JavaScript在对象之间传递值

JavaScript在对象之间传递值,javascript,object,Javascript,Object,当我在提示0下输入时,我预期会出现“停止”警报,但会收到“开始”警报。你能帮我得到“停止”警报吗 var丰田={ 制造:“丰田”, 型号:“花冠”, 燃料:0, 油箱:功能(添加燃油){ this.fuel=this.fuel+addingfuel; }, 开始:函数(){ 如果(this.fuel==0){ 警报(“停止”); }否则{ 警惕(“围棋”); } }, }; var addingfuel=提示(“请输入添加的燃油”、“升”); 丰田。坦克(); toyota.start()您必

当我在提示0下输入时,我预期会出现“停止”警报,但会收到“开始”警报。你能帮我得到“停止”警报吗

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);