Es scheint, dass das von Ihnen verwendete Zeichen tatsächlich länger ist als das tatsächliche Minuszeichen (ein Bindestrich).
-
Oben ist das, was Sie verwenden, unten ist das Minuszeichen. Sie scheinen das bereits zu wissen. Lassen Sie uns nun sehen, warum Javascript dies tut.
Das Zeichen, das Sie verwenden, ist eigentlich das ogham-Leerzeichen, bei dem es sich um ein Leerzeichen handelt. Daher wird es im Grunde genommen als dasselbe wie ein Leerzeichen interpretiert, was bedeutet, dass Ihre Aussage alert(2+ 40)
für Javascript aussieht .
Es gibt andere Zeichen wie dieses in Javascript. Eine vollständige Liste finden Sie hier auf Wikipedia .
Interessant an diesem Charakter ist die Art und Weise, wie Google Chrome (und möglicherweise andere Browser) ihn in der oberen Leiste der Seite interpretiert.
Es ist ein Block mit 1680
innen. Das ist eigentlich die Unicode-Nummer für die Ogham-Leerzeichen. Es scheint nur meine Maschine zu sein, die das tut, aber es ist eine seltsame Sache.
Ich habe beschlossen, dies in anderen Sprachen auszuprobieren, um zu sehen, was passiert, und dies sind die Ergebnisse, die ich erhalten habe.
Sprachen, in denen es nicht funktioniert:
Python 2 & 3
>> 2+ 40
File "<stdin>", line 1
2+ 40
^
SyntaxError: invalid character in identifier
Rubin
>> 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 (innerhalb der main
Methode)
>> 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
Gehen
>> 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.
Sprachen, in denen es funktioniert:
Planen
>> (+ 2 40)
=> 42
C #
(innerhalb der Main()
Methode)
Console.WriteLine(2+ 40);
Output: 42
Perl 6
>> ./perl6 -e'say 2+ 40'
42