Parece que el carácter que está utilizando es más largo que el signo menos real (un guión).
-
La parte superior es lo que está utilizando, la parte inferior es lo que debería ser el signo menos. Parece que ya lo sabes, así que ahora veamos por qué Javascript hace esto.
El carácter que usa es en realidad la marca de espacio ogham, que es un carácter de espacio en blanco, por lo que básicamente se interpreta como lo mismo que un espacio, lo que significa que su declaración se parece alert(2+ 40)
a Javascript.
Hay otros caracteres como este en Javascript. Puedes ver una lista completa aquí en Wikipedia .
Algo interesante que noté sobre este personaje es la forma en que Google Chrome (y otros posibles navegadores) lo interpreta en la barra superior de la página.
Es un bloque con 1680
adentro. Ese es en realidad el número unicode para la marca de espacio ogham. Parece que solo mi máquina está haciendo esto, pero es algo extraño.
Decidí probar esto en otros idiomas para ver qué pasa y estos son los resultados que obtuve.
Idiomas en los que no funciona:
Python 2 y 3
>> 2+ 40
File "<stdin>", line 1
2+ 40
^
SyntaxError: invalid character in identifier
Rubí
>> 2+ 40
NameError: undefined local variable or method ` 40' for main:Object
from (irb):1
from /home/michaelpri/.rbenv/versions/2.2.2/bin/irb:11:in `<main>'
Java (dentro del main
método)
>> System.out.println(2+ 40);
Main.java:3: error: illegal character: \5760
System.out.println(2+?40);
^
Main.java:3: error: ';' expected
System.out.println(2+?40);
^
Main.java:3: error: illegal start of expression
System.out.println(2+?40);
^
3 errors
PHP
>> 2+ 40;
Use of undefined constant 40 - assumed ' 40' :1
C
>> 2+ 40
main.c:1:1: error: expected identifier or '(' before numeric constant
2+ 40
^
main.c:1:1: error: stray '\341' in program
main.c:1:1: error: stray '\232' in program
main.c:1:1: error: stray '\200' in program
exit status 1
Vamos
>> 2+ 40
can't load package: package .:
main.go:1:1: expected 'package', found 'INT' 2
main.go:1:3: illegal character U+1680
exit status 1
Perl 5
>> perl -e'2+ 40'
Unrecognized character \xE1; marked by <-- HERE after 2+<-- HERE near column 3 at -e line 1.
Idiomas en los que funciona:
Esquema
>> (+ 2 40)
=> 42
C #
(dentro del Main()
método)
Console.WriteLine(2+ 40);
Output: 42
Perl 6
>> ./perl6 -e'say 2+ 40'
42