后增量和加法

时间:2014-07-21 17:31:59

标签: javascript addition

我不明白为什么在这个例子中添加不起作用:

<button id="button">Click</button>
<p id="counter"></p>

function handler(){
    var button = document.getElementById('button'),
    count = document.getElementById('counter'); // 
    count.textContent = 0;


    button.onclick = function(){
    count.textContent++; //Why this works

    //but this does not
    //count.textContent + 1;  

    console.log(typeof count.textContent); // Why is a string?
    }

}

window.onload = handler;

为什么(typeof count.textContent)string

5 个答案:

答案 0 :(得分:2)

count.textContent++; //Why this works

上述行相当于count.textContent = count.textContent +1; 它还将变量解析为数字变量。

而下面的只是一个关于字符串的声明:

//count.textContent + 1; 

所以你需要使用以下内容:

count.textContent = parseInt(count.textContent) + 1  

答案 1 :(得分:1)

只有这样写:

   count.textContent = parseInt(count.textContent) + 1;  

count.textContent ++在递增后将值存储在count.textContent中。

但是在count.textContent + 1的情况下,需要将递增的值存储在某个变量中;

答案 2 :(得分:1)

textContent顾名思义就是一个字符串。当你这样做(并实际赋值给某事物):

count.textContent = count.textContent + 1;  

Javascript会将此解释为string + a number,并且由于+是字符串的连接运算符,因此它会将数字转换为字符串,然后将它们粘在一起。所以你得到:

"0" + "1" = "01"

执行此操作时:

count.textContent++;

++运算符不是为字符串定义的,而是用于数字。因此,javascript将(尝试)将您的字符串转换为数字,增加它,然后将其转换回字符串并将其存储回count.textContent

等效陈述类似于:

count.textContent = parseInt(count.textContent,10) + 1;

答案 3 :(得分:0)

对于问题的第一部分,count.textContent + 1是一个返回1加上当前值的语句。它不会修改内容。

count.textContent++修改内容并返回未修改的数字。

count.textContent = count.textContent + 1会修改内容并返回修改后的数字,该数字相当于++count.textContent

对于问题的第二部分,元素textContent始终是一个字符串。通过使用加法(+)运算符,您将字符串"0"转换为数字0,然后修改结果数字。

答案 4 :(得分:0)

他们是不同的运营商。

++X是增量运算符。它的作用是向X添加一个,然后返回当前值X。您可以将其读作&#39;添加一个X,然后返回X

增量运算符也可以追随某些东西。 X++将返回X的当前值,然后递增它。

+是加法运算符。它不会修改它所使用的东西的值。 X + Y可以被理解为&#39;返回X + Y的值。它不会修改任何一个参数。它也是可交换的,因此X+Y === Y+X' when X and Y`都是数字。

在字符串上使用时,它们也有不同的行为。 +将连接字符串,因此'foo' + 'bar' === 'foobar'++没有为字符串定义,因此它会抛出一个错误,或者它会强制将它赋予一个数字的值。

element.textContent是一个以字符串形式返回的属性。如果您使用此:

element.textContent++;

该值将被强制转换为一个数字,增加一个,之后的值将被返回。 (现在,你没有用返回值做任何事情)

如果您使用此:

element.textContent + 1;

该语句将返回一个字符串:'01'

同样,你没有为此设置任何内容,+不会更改参数。默认情况下,Javascript会尝试强制左侧参数(X中的X + Y),因此1 + '0' === 1'1' + 0 === '10'