将数字添加到未定义的值

时间:2016-03-02 03:45:57

标签: javascript

在JS示例中:

 var test;

 function test () {
     var t = test + 1;
     alert(t);
 }

我正在尝试制作一个计数器,但如果我将test设置为0,它仍然会给我1。我不知道我做错了什么。我正通过按钮激活该功能。

3 个答案:

答案 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;