使用している文字が、実際のマイナス記号(ハイフン)よりも実際に長いようです。
-
上部はあなたが使用しているものであり、下部はマイナス記号がどうあるべきかです。あなたはすでにそれを知っているようですので、今度はJavascriptがこれを行う理由を見てみましょう。
使用する文字は実際には空白文字であるオガムスペースマークであるため、基本的にスペースと同じものとして解釈されますalert(2+ 40)
。つまり、ステートメントはJavascriptのように見えます。
JavaScriptには、このような他の文字があります。完全なリストはWikipediaで確認できます。
この文字について私が気付いた興味深い点の1つは、Google Chrome(および他の可能なブラウザー)がページの上部バーでそれを解釈する方法です。

1680
内部にブロックがあります。これは実際にはオガムスペースマークのUnicode番号です。これは私のマシンだけのようですが、奇妙なことです。
私はこれを他の言語で試して何が起こるかを確認することに決めました、そしてこれらは私が得た結果です。
動作しない言語:
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
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
行く
>> 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