一个JavaScript语言问题

wei*_*lou 1 javascript

在以下示例中

<!DOCTYPE html>
<meta charset="utf-8">
<title>Untitled Document</title>
<script>
    var str = '11';
    str = str++;
    alert(str); // 11
</script>
Run Code Online (Sandbox Code Playgroud)

为什么结果11而不是12

在此示例中,结果为12:

<!DOCTYPE html>
<meta charset="utf-8">
<title>Untitled Document</title>
<script>
    var str = '11';
    str++;
    alert(str); // 12
</script>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

谢谢!


var str = 10;
var re = str++;
alert(re); // 10
alert(str); // 11
Run Code Online (Sandbox Code Playgroud)

str将返回10到re第一个,然后将str自身增加到11.

var str = 10;
var str = str++;
alert(str); // 10
Run Code Online (Sandbox Code Playgroud)

在这种情况下,str将10返回到str第一个,然后strstr其自身增加到11.

但事实并非如此.有谁能解释一下?

谢谢!

Jac*_*kin 11

发生这种情况的原因是因为post increment(str++)的返回值是递增之前的值.

例:

var x = 10;
alert(x++); //10, because return value is value before increment
alert(x); //11 because the variable was incremented on the previous line
Run Code Online (Sandbox Code Playgroud)

解决这个问题的方法是使用pre-increment运算符,它只是++操作符()之前的运算符++str.这将向操作数添加1并返回新值 - 而不是后增量运算符(str++),它将向操作数添加1并返回旧值.

例:

var x = 10;
alert(++x); //11
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这句话str = str++是一个真正的问题.之所以:

表达式str++返回原始值,因此当您重新分配时str,您实际上是将OLD VALUE重新分配回来str.因此对变量进行零变异,然后返回到第一个变量.

以下是您的代码的外观:

<!DOCTYPE html>
<meta charset="utf-8">
<title>Untitled Document</title>
<script>
    var str = '11';
    alert(++str); // 12
</script>
Run Code Online (Sandbox Code Playgroud)