var x = null;
+++x
genera un ReferenceError
, pero cuando lo haga lo mismo usando postfix operador de incremento +x++
, funciona muy bien.¿Por qué +++ x da un mensaje de error cuando + x ++ funciona bien?
var x = null;
+++x
genera un ReferenceError
, pero cuando lo haga lo mismo usando postfix operador de incremento +x++
, funciona muy bien.¿Por qué +++ x da un mensaje de error cuando + x ++ funciona bien?
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
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. –
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;
+ x ++ se divide en dos pasos:
+++ x también se divide en dos pasos, pero en un orden particular:
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.
++ x = 1 cuando x es nulo. no arroja ninguna excepción. –
@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
Simplemente declaro 'var x = null;' y luego hago '++ x', devuelve' 1'. –
¿por qué quieres aumentar un nulo? de cualquier manera – Qchmqs
No funcionó en mi navegador Chrome (14.0.835). – lostyzd
En Chrome ambos dan 'ReferenceError' – Andrey