2011-10-10 8 views

Respuesta

5

El LeftHandSideExpression para el operador ++ no debe ser un número. Por ejemplo

1++; 

fallarán con el mismo error (operando de incremento no válido). Solo puede aplicar los operadores pre y postincrement en variables/identificadores/expresiones.

Dado que el signo + arroja el null value en un número (0), obtiene el mismo resultado.

Ejemplos:

var foo = null, 
    bar = 5; 

foo++; // 0 
0++;  // invalid increment operand 
null++; // invalid increment operand 
(+bar)++ // invalid increment operand 
foo++ +2; // 2 
+0

Por favor, compruebe la pregunta actualizada.Quité los paréntesis y el operador de incremento de postfijo funciona en todos los navegadores, mientras que el incremento de prefijo no funciona. –

0

si u utilizaron el x = 0; x se inicializará con un tipo de entero que aceptará el operador ++ x mientras ++ (+ x) es como ++ (+ nulo) así que mejor intente cambiar a X = 0;

1

+ x ++ se divide en dos pasos:

  • + x Inicializa x a 0, por lo que ya no es nula.
  • x ++ luego incrementa x, lo cual funciona porque x ya no es nulo.

+++ x también se divide en dos pasos, pero en un orden particular:

  • ++ x se evalúa primero, que produce la excepción porque x es nulo.
  • + x se evaluarían, excepto que ya ha tenido una excepción.

Creo que su suposición fue que +++ x se analizaría como ++ (+ x), pero en realidad se analiza como + (++ x). Es una sintaxis de aspecto ambiguo, los diseñadores del lenguaje tuvieron que elegir una de las dos formas de analizarlo y, desde su punto de vista, eligieron "el otro".

Para ser honesto, no hay ningún valor en formatear el código de esta manera de todos modos, todo lo que se obtiene es un código de apariencia dudosa que está destinado a confundir a las personas.

+0

++ x = 1 cuando x es nulo. no arroja ninguna excepción. –

+0

@Narenda, creo que estás suponiendo que x es un número entero. Los enteros no pueden * nunca * ser nulos (el código de "int x;" inicializaría automáticamente x como 0). En este caso, estamos tratando con un tipo de referencia personalizado (en lugar de un tipo de valor incorporado) que implementa el operador de incremento. Las variables de dichos tipos * pueden * establecerse como nulas, y ++ x en tal caso * arrojarían una excepción. – Chris

+0

Simplemente declaro 'var x = null;' y luego hago '++ x', devuelve' 1'. –

Cuestiones relacionadas