在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?
请每个回答只回答一个特征。
在你看来,你遇到过的最令人惊讶、最怪异、最奇怪或最“WTF”的语言特性是什么?
请每个回答只回答一个特征。
当前回答
再给JavaScript投一票:
parseInt('08') == 0
因为任何前导为0的数都被解释为八进制(奇怪),无效的八进制数被计算为0(坏)。我是在8月份发现这一点的,当时我几个月没碰过的代码自己崩溃了。事实证明,它本可以在10月份自行修复。
八进制支持显然已被弃用,所以未来几代的javascript将不会有这个仪式。
其他回答
我有点纠结:
1;
在perl中,模块需要返回true。
这不是一个奇怪的功能,事实上,如果你仔细想想,它是完全有意义的,但还是给了我一个WTF时刻。
在c++(和c#)中,基类的子类不能访问基实例上的私有和受保护成员。
class Base {
protected:
m_fooBar;
};
class Derived: public Base {
public:
void Test(Base& baseInstance) {
m_fooBar=1; //OK
baseInstance.m_fooBar = 1; //Badness
//This, however is OK:
((Derived&)baseInstance).m_fooBar = 1; //OK
}
};
Tcl在解释器中虚拟化的时间钩子非常奇怪: http://www.tcl.tk/cgi-bin/tct/tip/233.html
基本上,它允许你让解释器使用一些其他的时间数据源,例如,先在模拟器中运行硬件测试,然后替换计时器函数,对真实的东西运行相同的测试。
JavaScript是面向对象的,对吧?因此,在文字字符串和数字上运行方法应该是可行的。比如"hello". touppercase()和3.toString()。第二个是语法错误,为什么?因为解析器期望一个数字后面跟一个点是一个浮点字面值。这不是WTF, WTF是你只需要再加一个点就可以了:
3..toString()
原因是字面上的3。被解释为3.0,3.0. tostring()工作正常。
在JavaScript中,undefined是一个全局变量,其默认值为原始值undefined。你可以改变undefined的值:
var a = {};
a.b === undefined; // true because property b is not set
undefined = 42;
a.b === undefined; // false
由于undefined的可变性,通过typeof检查undefined通常是一个更好的主意:
var a = {};
typeof a.b == "undefined"; // always true