添加时返回为NaN的整数
Integer returning as NaN when added
编写一些代码,当创建一个类的实例时,我的一个整数变量发生了一些奇怪的事情:
function Mat(x, y, spawner) {
this.x = x;
this.y = y;
this.val = 1;
this._spawner = spawner;
this.newborn = true;
this.bornTime = 0;
this.spawnTimer = setInterval("this.bornTime++; console.log(this.bornTime);", 1000);
}
简洁明了的代码;在创建变量实例后的每一秒,它应该将bornTime变量增加1并记录它。
Mat.prototype.update = function() {
if (this.bornTime >= 5) {
this.bornTime = null;
clearInterval(this.spawnTimer);
this.newborn = false;
console.log("Grown!");
}
}
这个额外的代码会导致这个实例在5秒钟后"增长",但是当我检查控制台时,它显示bornTime不是一个数字(NaN)。
为什么会这样,有没有我看不到的解决方案?
setTimeout
代码内部的this
与外部不同(有关MDN的更多信息),因此您的代码实际上是在计算undefined++
,即NaN
。
您必须创建另一个变量,并将函数传递给setTimeout,而不是让它评估字符串(顺便说一句,传递函数应该更快,看起来更好):
var that = this;
this.spawnTimer = setInterval(function(){
that.bornTime++;
console.log(that.bornTime);
}, 1000);
我知道这是一个5年前的问题,但它是2018年的,这里有一个Es6语法解决方案,以避免绑定关键字this
的额外步骤。
this.spawnTimer = setInterval(() => {
this.bornTime++;
console.log(this.bornTime);
}, 1000);
相关文章:
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 检测个位数整数时正在转换毫秒
- 限制javascript变量的最小/最大整数
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 正则表达式只允许 x 个整数
- JavaScript NaN equvialence
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何在Chartjs中制作整数比例
- 减去两个索引不同但值相同的整数
- 如何为排除无穷大和NaN的数字声明Flow类型
- 为什么我在这个javaScript代码中使用NaN
- 如何防止Math.max()返回NaN
- NaN作为函数结果而不是必需的整数出现问题
- 当a是负数,b是非整数时,为什么Math.pow(a,b)是NaN
- Node.JS/Javascript - 将字符串转换为整数正在返回 NaN,而我不希望它这样做
- 在 javascript 中递增整数会导致 NaN
- 添加时返回为NaN的整数
- 用整数替换node.js中的NaN
- 即使输入是整数,JavaScript也返回NaN
- 导致NaN的JavaScript整数