10

为什么 underscore.js 的 isUndefined 是这样定义的?

_.isUndefined = function(obj) { return obj === void 0; };

为什么这行不通?

typeof obj === 'undefined'

4

3 回答 3

14

好的,一开始typeof obj === 'undefined'比较慢,因为您可以轻松验证。

那么问题是为什么要进行比较

obj === void 0 

对比

obj === undefined

让我们来看看:

void 0;void返回将始终返回的一元运算符的结果undefined(即void 1没有区别)

undefined指向全局变量undefined

正常情况下两者是一样的。我认为虽然void 0是首选,因为可以undefined使用局部变量进行遮蔽undefined:) 这很愚蠢,但它确实发生了。

于 2012-11-21T07:21:43.030 回答
3

它的编写方式可能更有效。您为什么不分析这两个定义并查看?

于 2012-11-19T23:18:46.150 回答
2

如果你写了viod,你会得到一个语法错误。您将“未定义”拼写为'undeifned',但您没有收到任何错误。所以,一个可能的原因是更容易调试!:)

于 2012-11-19T23:40:29.743 回答