为什么要检查未定义的类型而不仅仅是值?

时间:2016-01-26 09:08:21

标签: javascript

我最近得到了这样的遗留代码:

if (typeof value != "undefined" && value.someOperation()) { }

我知道它可以防止未定义的对象问题,但这样做并不简单:

if (value && value.someOperation()) { }

深入javascript中的某个地方是黑客还是某种情况根本不起作用?此处无法获取0false而不是该对象。我想知道我是否可以将第一个表达式改为第二个表达式而且我不会破坏任何东西。

1 个答案:

答案 0 :(得分:1)

在这一行

if (typeof value != "undefined" && value.someOperation()) { }
当且仅当typeof value != "undefined"valuenull时,

undefined才会被评估为false。但是,如果该值为0false,那么它将评估为true,从而转到第二个条件value.someOperation()

  

这里没有可能得到0或false而不是那个对象。

如果value的值不能是0false,那么您可能需要先检查value.someOperation,然后再检查value.someOperation() value.someOperation()它可能会出现以下错误

  

TypeError:undefined不是函数

事实上,在这两种情况下,你可能想在value.someOperation之前先检查value.someOperation()是否正确。

if (value && value.someOperation && value.someOperation()) { }

if (typeof value != "undefined" && value.someOperation && value.someOperation()) { }