在JS示例中:
var test;
function test () {
var t = test + 1;
alert(t);
}
我正在尝试制作一个计数器,但如果我将test
设置为0
,它仍然会给我1
。我不知道我做错了什么。我正通过按钮激活该功能。
答案 0 :(得分:6)
将test
定义为0
,以便它开始时为Number
类型的对象。将数字添加到undefined
会产生NaN
(非数字),这不会让你到任何地方。
现在要解决为什么数字永远不会超过1
的问题,第一个错误是您实际上没有在代码中增加test
的值,只需分配结果在1
该结果之前暂时将t
添加到alert()
。这里没有test
的变异。使用前置或后置增量运算符或将test + 1
的结果设置回test
进行更新。
其次,你可能没有一个函数和一个名为相同的局部变量,它只会让事情变得混乱。
考虑到所有这些因素,我们得到:
var test = 0; // Now test is a Number
function testIncrementOne() { // name change to prevent clashing/confusing
var t = ++test; // pre-increment (adds 1 to test and assigns that result to t)
// var t = test++; // post-increment (assigns the current value of test to t
// and *then* increments test)
alert(t);
}
或者只是:
function testIncrementOne() {
alert(++test);
}
答案 1 :(得分:1)
我认为你想要的是:
var test = 0;
function incrementTest() {
test = test + 1;
alert(test);
}
答案 2 :(得分:0)
如果您无法控制 test ,您可能会执行以下操作:
// Test if test is a number, if not, convert it
if (typeof test != 'number') {
test = Number(test);
}
// If conversion resulted in NaN, set to a default
if (isNaN(test) {
test = 0;
}
// Now it's safe to do addition
test += 1
当然,这一切都非常乏味,可以替换为:
test = (+test || 0) + 1;