在以下示例中
<!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第一个,然后str将str其自身增加到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)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |