Il semble que le caractère que vous utilisez est en réalité plus long que le signe moins réel (un trait d'union).
-
Le haut est ce que vous utilisez, le bas est ce que le signe moins devrait être. Vous semblez déjà le savoir, alors voyons maintenant pourquoi Javascript fait cela.
Le caractère que vous utilisez est en fait la marque d'espace ogham qui est un caractère d'espace, donc il est fondamentalement interprété comme la même chose qu'un espace, ce qui signifie que votre déclaration ressemble alert(2+ 40)
à Javascript.
Il existe d'autres caractères comme celui-ci en Javascript. Vous pouvez voir une liste complète ici sur Wikipedia .
Quelque chose d'intéressant que j'ai remarqué à propos de ce personnage est la façon dont Google Chrome (et d'autres navigateurs possibles) l'interprète dans la barre supérieure de la page.
C'est un bloc avec l' 1680
intérieur. Il s'agit en fait du numéro unicode de la marque d'espace ogham. Il semble que ce soit juste ma machine qui le fasse, mais c'est étrange.
J'ai décidé d'essayer cela dans d'autres langues pour voir ce qui se passe et ce sont les résultats que j'ai obtenus.
Langues dans lesquelles il ne fonctionne pas:
Python 2 et 3
>> 2+ 40
File "<stdin>", line 1
2+ 40
^
SyntaxError: invalid character in identifier
Rubis
>> 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 (à l'intérieur de la main
méthode)
>> 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
Aller
>> 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.
Langues dans lesquelles il fonctionne:
Schème
>> (+ 2 40)
=> 42
C #
(à l'intérieur de la Main()
méthode)
Console.WriteLine(2+ 40);
Output: 42
Perl 6
>> ./perl6 -e'say 2+ 40'
42