在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?
请每个回答只回答一个特征。
在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?
请每个回答只回答一个特征。
当前回答
在JavaScript中,你可以使用双位负(~~n)来代替Math.floor(n)(如果n是正数)或parseInt(n, 10)(即使n是负数)。N | N和N & N总是得到和~~ N相同的结果。
var n = Math.PI;
n; // 3.141592653589793
Math.floor(n); // 3
parseInt(n, 10); // 3
~~n; // 3
n|n; // 3
n&n; // 3
// ~~n works as a replacement for parseInt() with negative numbers…
~~(-n); // -3
(-n)|(-n); // -3
(-n)&(-n); // -3
parseInt(-n, 10); // -3
// …although it doesn’t replace Math.floor() for negative numbers
Math.floor(-n); // -4
单个位的求反(~)计算-(parseInt(n, 10) + 1),因此两个位的求反将返回-(-(parseInt(n, 10) + 1) + 1)。
更新:这里有一个jsPerf测试用例,比较了这些替代方案的性能。
其他回答
Commodore BASIC的命令快捷方式。基本上大多数命令都有一个缩写形式,通常是第一个字母+ (shift+第二个字母)。但是因为C64上的字符集默认都是大写的,这些命令看起来就像奇怪的符号。下面是一个hello world的简短例子:
也许有人有更好的例子,更有实质内容,但对于长程序来说,这看起来完全是荒谬的。
以下是缩略语列表:http://www.c64-wiki.com/index.php/BASIC_keyword_abbreviation
这可能已经被提到了,但是——
PHP对八进制值的处理:
$a = 07; // 7 (as it should be)
$b = 08; // 0 (would be an error in any sensible language)
$c = 018; // 1 (again, should have been an error)
$d = 0A; // error (as it should be)
请看这里:http://bugs.php.net/bug.php?id=29676
还要注意关于这个错误的评论——Derick称其为一个特性(引用“fix”表示),而不是一个错误,他声称它会“在脚本中使用数字的所有情况下显著降低PHP的速度”——但是,为什么PHP会引发一个0A错误呢?
我认为人们可以写一整本书来讲述PHP的古怪之处……
Perl可以自动将26进制转换为10进制,如果你能在早上接受自己的话……
$ perl -E "say lc (@a='a'..'asdf')"
30530
在Python中:
>>> x = 4
>>> y = 1000000
>>> x is 4
True
>>> y is 1000000
False
>>>
如果你不相信,就试试吧!
在javaScript中,NaN是一个全局变量。