2016-12-03 92 views
-1

后,我正在寻找一个理由,为什么增量运营商并不在我设置innerHTML值,如下面的地方增加的数值:后递增操作不增加变量,直到评价

<div id="php"></div> 

var a = 14; 
document.getElementById("php").innerHTML = a++;//the result will be 14 instead of 15 
+0

虽然我个人使用的增量运算符,这是可以的,因为我知道我在做什么,我觉得这很好,在这个问题的建议,此标记为重复值得一看,这是为了避免你遇到的一种混淆,包括将增量语句全部放在单独的行中,或者改写'a + = 1'。尽管拒绝阅读任何文档的纯粹主义者可能会反对,但这[文档](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_())非常清晰。 – 2016-12-03 18:02:32

+0

(续)它说,*增量操作符递增(加1)其操作数并返回一个值。如果使用了postfix,在操作数之后加上运算符(例如'x ++'),那么它会在**递增前返回** ** – 2016-12-03 18:06:45

+1

@torazaburo:那么为什么alert(a ++)工作正常,并且在innerHTML中返回值然后递增它! 。 – mina

回答

0

它确实增加了变量,但它写入的innerHTML然后递增值,你可以使用++a,这将增加该值将其写入的innerHTML之前。

var a = 14 
 
var b = 14 
 
console.log('before a', a) 
 
document.getElementById("test1").innerHTML = a++ 
 
console.log('after a', a) 
 

 
console.log('before b', b) 
 
document.getElementById("test2").innerHTML = ++b 
 
console.log('after b', b)
<div id="test1"></div> 
 
<div id="test2"></div>

+0

但如果我使用警报(a ++),它将正常工作,并且警报将具有新增值 – mina

+0

您的警报行为与我的警报行为不同。重启? – oMiKeY

0

而不是使用a++你可以做++a变量值分配之前得到增量:

var a = 14; 
 
document.getElementById("php").innerHTML = ++a;
<div id="php"></div>

+0

但是如果我使用alert(a ++),它将工作正常,并且警报将具有新增值 – mina

0

因为您使用的是后缀increment operatorvariable++,这意味着您首先获取值,然后增加该变量。

当您使用前缀增量运算符++variable时,变量会先递增,然后返回该值。

var a = 42; 
 
console.log(a++); // shows 42, value is 43 
 
console.log(a); // 43 
 
console.log(++a); // 44 
 
console.log(a); // 44

+1

但如果我使用警报(a ++),它会正常工作,警报将有新增值 – mina

+0

@mina,我无法证明这一点。 –

+0

@mina它不会。 – Lewis