您使用的字符似乎比实际的减号(连字符)长。
-
顶部是你正在使用的,底部是减号应该是什么。你似乎已经知道了,所以现在让我们看看为什么 Javascript 会这样做。
您使用的字符实际上是ogham space mark,它是一个空白字符,因此它基本上被解释为与空格相同的东西,这意味着您的语句在Javascript中看起来像alert(2+ 40)。
在 Javascript 中还有其他类似的字符。您可以查看完整列表here on Wikipedia。
我注意到这个字符的一个有趣的地方是谷歌浏览器(以及可能的其他浏览器)在页面顶部栏中解释它的方式。
这是一个块,里面有1680。这实际上是 ogham 空格标记的 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