我正在读一本名为YDKJS的书,其中提到:
typeof null
是一个有趣的情况,因为它错误地返回"object"
,而你期望它返回"null"
。警告:这是 JS 中长期存在的错误,但可能永远不会修复。Web 上太多的代码依赖于该错误,因此修复它会导致更多的错误!
我无法理解任何使用null
返回类型的代码。任何人都可以给出一些示例用例吗?
不是他们使用null
的返回类型,而是变量的返回类型。
我的意思是,开发人员在很多情况下编写:
if (typeof something === "object"){
}
并且期望通过此条件的任何东西也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;
}
可以看出,我们正在处理所有情况,无论是object
、undefined
、string
、number
还是null
。
如果这个错误被修复,并且typeof null
会返回null
,那么rejectTransaction
将永远不会被调用。相反,将调用doSomethingWithNumberOrString
。
我并不是说这是一个很好的代码示例,而是可能会破坏某些代码,因为开发人员依赖于typeof null
返回"object"
而不是"null"
从类型的角度来看,null
属于object
类型是有意义的。就像NaN
和Infinity
属于number
型是有道理的.
因为如果不是对象,可空变量还会引用什么?
原语在javascript中是不可变的。您不会得到它们的参考,而是副本。