我正在读这本名为YDKJS的书,它提到:
typeof null是一个有趣的案例,因为"object"当你期望它返回时,它会错误地返回"null".警告:这是JS中一个长期存在的错误,但可能永远不会修复.Web上的代码过多依赖于bug,因此修复它会导致更多错误!
我无法绕过任何使用a的返回类型的代码null.任何人都可以举一些例子用例吗?
并不是他们使用a的返回类型null,而是使用变量的返回类型.
我的意思是开发人员正在编写的案例很多:
if (typeof something === "object"){
}
Run Code Online (Sandbox Code Playgroud)
并且期望通过这种条件的任何事情都可以null.
因此,他们依赖于这样一个事实:无论什么依赖于那个true声明块来保持一个null价值.
假设我们有这段代码:
switch (typeof something) {
case "object":
if (something) {
doSomethingWithObject(something);
} else {
rejectTransaction(); // we have null
}
break;
case "undefined":
throwAMeaningfulError();
break;
default:
doSomethingWithNumberOrString(something);
break;
}
Run Code Online (Sandbox Code Playgroud)
可以看出,我们正在处理所有的情况下,无论是object,undefined,string,number或null.
如果这个bug会被修复,并且typeof null会返回null,rejectTransaction那么永远不会被调用.相反,doSomethingWithNumberOrString会被召唤.
我不是说这是代码的一个很好的例子,但是可能会因为开发人员依赖于typeof null返回"object"而不是"null"