Wygląda na to, że znak, którego używasz, jest w rzeczywistości dłuższy niż rzeczywisty znak minus (łącznik).
-
Góra jest tym, czego używasz, dół to znak minus. Wydaje się, że już to wiesz, więc teraz zobaczmy, dlaczego JavaScript to robi.
Znak, którego używasz, jest tak naprawdę znakiem spacji ogham, który jest znakiem spacji, więc jest zasadniczo interpretowany jako to samo co spacja, co oznacza, że twoje wyrażenie wygląda jak alert(2+ 40)
JavaScript.
Istnieją inne takie znaki w Javascript. Możesz zobaczyć pełną listę tutaj na Wikipedii .
Coś interesującego, co zauważyłem w tej postaci, to sposób, w jaki Google Chrome (i możliwe inne przeglądarki) interpretuje ją na górnym pasku strony.
To jest blok z jego 1680
wnętrzem. Jest to w rzeczywistości numer Unicode znaku spacji oghama. Wygląda na to, że robi to tylko moja maszyna, ale to dziwna rzecz.
Postanowiłem wypróbować to w innych językach, aby zobaczyć, co się stanie i takie są wyniki, które uzyskałem.
Języki, w których nie działa:
Python 2 i 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 (wewnątrz main
metody)
>> 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
do
>> 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
Udać się
>> 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.
Języki, w których działa:
Schemat
>> (+ 2 40)
=> 42
C #
(wewnątrz Main()
metody)
Console.WriteLine(2+ 40);
Output: 42
Perl 6
>> ./perl6 -e'say 2+ 40'
42