我最近得到了这样的遗留代码:
if (typeof value != "undefined" && value.someOperation()) { }
我知道它可以防止未定义的对象问题,但这样做并不简单:
if (value && value.someOperation()) { }
深入javascript中的某个地方是黑客还是某种情况根本不起作用?此处无法获取0
或false
而不是该对象。我想知道我是否可以将第一个表达式改为第二个表达式而且我不会破坏任何东西。
答案 0 :(得分:1)
在这一行
if (typeof value != "undefined" && value.someOperation()) { }
当且仅当typeof value != "undefined"
为value
或null
时, undefined
才会被评估为false。但是,如果该值为0
或false
,那么它将评估为true,从而转到第二个条件value.someOperation()
。
这里没有可能得到0或false而不是那个对象。
如果value
的值不能是0
或false
,那么您可能需要先检查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()) { }