2009-12-28 13 views
5

Por ejemplo esto:entendimiento Incrementar

var a = 123; 
var b = a++; 

ahora a contiene 124 y b contiene 123

entiendo que b está tomando el valor de una y luego una se incrementa. Sin embargo, no entiendo por qué esto es así. La razón principal de por qué los creadores de JavaScript querrían esto. ¿Cuál es la ventaja de esto aparte de confundir a los novatos?

+3

No hay ninguna diferencia entre Javascript y PHP en el comportamiento del operador de incremento – Asaph

+1

Aunque puede escribir esto en JavaScript, este comportamiento es el mismo que la mayoría (¿alguna?) De estilo C. –

+0

Gracias a todos por su respuesta. Esto debe tener algo que ver con la Programación Orientada a Objetos. Habiendo usado PHP durante tanto tiempo, en la forma de procedimiento, he llegado a esperar que cada vez que una variable esté en el lado izquierdo de cualquier operador, siempre mantendrá su valor anterior, a menos que se haya reasignado directamente. Esta es una forma radicalmente diferente de pensar para mí, y una a la que ahora tendré que acostumbrarme. – Chad

Respuesta

8

Es por eso que se llama el "operador de post-incremento". Esencialmente, todo es una expresión que da como resultado un valor. a + 1 es una expresión que da como resultado el valor 124. Si asigna esto a b con b = a + 1, b tiene el valor de 124.Si no asigna el resultado a nada, a + 1 resultará en el valor 124, se descartará inmediatamente ya que no lo está "atrapando" en ninguna parte.

BTW, incluso b = a + 1 es una expresión que devuelve 124. El valor resultante de una expresión de asignación es el valor asignado. Es por eso que c = b = a + 1 funciona como es de esperar.

De todos modos, lo especial de una expresión con ++ y -- es que, además de devolver un valor, el operador ++ modifica la variable directamente. Entonces, ¿qué sucede cuando lo haces b = a++ es, la expresión a++ devuelve el valor 123 e incrementa a. El incrementador poste devuelve primero el valor, luego incrementos, mientras que los pre incrementador ++aprimeros incrementos, a continuación, devuelve el valor. Si acaba de escribir a++ por sí mismo sin asignación, no notará la diferencia. Así es como generalmente se usa a++, como short-hand para a = a + 1.

Esto es bastante estándar.

+0

Buena respuesta.Mi pensamiento era: ¿por qué si a = 2 yb = a + 1 obtenemos b = 3 y a mantiene su valor original. Pero el autoincrement es una característica especial en los lenguajes de programación que NO SIGNIFICA SIGNIFICAR AGREGAR 1 y que es donde estaba confundido, pero ahora lo entiendo. – Chad

5

Tenga en cuenta que también se puede escribir

b = ++a; 

que tiene el efecto que probablemente está esperando.

Es importante darse cuenta de que aquí hay dos cosas: la asignación y el incremento y el idioma deben definir en qué orden van a suceder. Como tenemos disponibles tanto ++a como a++, tiene sentido que tengan diferentes significados.

Para aquellos de nosotros de fondo C, esto es bastante natural. Si PHP se comporta de manera diferente, nos podríamos estar preguntando por qué PHP eligió desviarse de lo que estamos acostumbrados.

-2

El incremento posterior y el preincremento son operadores comunes en muchos idiomas, siendo Javascript unos 30 años después de ser el primero. PHP también admite post-incremento.

3

++ puede usarse como operador de incremento adicional como en su ejemplo, o podría usarse como un operador de incremento previo si se usa antes de variable.

var b = ++a; 

Entonces primero la variable a se incrementará, a continuación, el valor incrementado es asignado a b.

1

Esta es la forma estándar de hacerlo. El operador postincrement asigna el valor y luego se incrementa.

El operador preincremento (++a) aumenta y luego lo asigna.

No estoy familiarizado con php y no puedo decir cómo lo hace o por qué.

0

Cuando se pone el ++ después de la variable, que se incrementa después de la asignación. También puede poner el ++antes de la variable y se incrementa antes de la asignación.

Javascript en realidad se comporta exactamente la misma manera que para PHP prefijo y incrementación de sufijo.

0

++ antes del pre-incremento de la llamada variable significa incrementar el valor de la variable antes de ejecutar la instrucción.
++ después de la variable llamada incremento posterior significa incrementar el valor de la variable después de ejecutar la instrucción.

ambos incrementan el valor de la variable.

$b=$a++; es equivalente a

$b=$a;//after 
$a=$a+1; 

$ b = ++ $ a; `es equivalente a

$a=$a+1;//before 
$b=$a; 

Otro ejemplo

$a=5; 
echo $a++;//prints 5; 

$a=5; 
echo ++$a;//prints 6;