Видається, що персонаж, який ви використовуєте, насправді довший, ніж фактичний знак мінус (дефіс).
-
Верх - це те, що ви використовуєте, нижнє - це те, що має бути знак мінус. Ви, здається, це вже знаєте, тому тепер давайте розберемося, чому Javascript робить це.
Символ, який ви використовуєте, є насправді знаком простору ogham, який є символом пробілу, тому він в основному інтерпретується як те саме, що і пробіл, а це означає, що ваше твердження схоже alert(2+ 40)
на Javascript.
У Javascript є інші подібні символи. Повний список ви можете побачити тут у Вікіпедії .
Щось цікаве, що я помітив щодо цього персонажа, - це те, як Google Chrome (та можливі інші веб-переглядачі) інтерпретують його у верхній смузі сторінки.
Це блок 1680
зсередини. Це фактично номер унікоду для пробілу 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
Перл 6
>> ./perl6 -e'say 2+ 40'
42