javascript _.是未定义的实现

ljsrvy3e  于 2023-02-28  发布在  Java
关注(0)|答案(4)|浏览(177)

为什么underscore.js的isUndefined是这样定义的?
_.isUndefined = function(obj) { return obj === void 0; };
为什么这行不通?
typeof obj === 'undefined'

gstyhher

gstyhher1#

好的,首先typeof obj === 'undefined'比较慢,你可以很容易地验证。
那么问题是为什么要做这样的比较

obj === void 0

对比

obj === undefined

让我们看看:
void 0;返回一元运算符void的结果,void将始终返回undefined(即void 1不会产生任何差异)
undefined指向全局变量undefined
在正常情况下,这两个是一样的。我认为,虽然void 0是首选,因为它可以阴影undefined与局部变量undefined:)这是愚蠢的,但它发生了。

ar7v8xwq

ar7v8xwq2#

这样写可能更有效率。你为什么不分析一下这两个定义呢?

5jdjgkvh

5jdjgkvh3#

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

brc7rcf0

brc7rcf04#

截至今天(2023-01-23),lodash的实现(不是我的)如下所示:

function isUndefined(value) {
  return value === undefined
}

我猜这个更新是由于undefined从ECMAScript 5开始是只读的,不能再被阴影化。
但是,这也带来了一个问题,如果变量value没有定义,函数就不会像您期望的那样返回true,而是抛出'Uncatch ReferenceError'
使用void 0的解决方案也有同样的问题。
因此,使用typeof obj === 'undefined'是安全的。

相关问题