Похоже, что используемый вами символ на самом деле длиннее, чем фактический знак минуса (дефис).
-
Верхняя часть - это то, что вы используете, нижняя - это то, каким должен быть знак минус. Вы, кажется, уже знаете это, так что теперь давайте посмотрим, почему Javascript делает это.
Символ, который вы используете, на самом деле является пробелом ogham, который является пробельным символом, поэтому он в основном интерпретируется как то же самое, что и пробел, что означает, что ваше утверждение похоже alert(2+ 40)
на Javascript.
В Javascript есть и другие подобные символы. Вы можете увидеть полный список здесь, в Википедии .
Что-то интересное, что я заметил в этом символе, - это то, как Google Chrome (и, возможно, другие браузеры) интерпретирует его в верхней панели страницы.
Это блок с 1680
внутренней частью. На самом деле это номер Unicode для знака пробела в Ogham. Кажется, это делает моя машина, но это странная вещь.
Я решил попробовать это на других языках, чтобы увидеть, что происходит, и вот результаты, которые я получил.
Языки, на которых он не работает:
Python 2 и 3
>> 2+ 40
File "<stdin>", line 1
2+ 40
^
SyntaxError: invalid character in identifier
Рубин
>> 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 (внутри main
метода)
>> 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
С
>> 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
Идти
>> 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.
Языки, на которых он работает:
Схема
>> (+ 2 40)
=> 42
C #
(внутри Main()
метода)
Console.WriteLine(2+ 40);
Output: 42
Perl 6
>> ./perl6 -e'say 2+ 40'
42