0

可能重复:
javascript未定义比较

这总是让我感到困惑,我永远找不到明确的答案,当我尝试一种或另一种时,它似乎也没有最终向我表明一种方法或另一种方法比另一种更有效。

我看到人们这样做:

typeof system_obj.alpha !== 'undefined'
!typeof system_obj.alpha == 'undefined'
typeof system_obj.alpha != 'undefined'

但在任何情况下,我总是时不时地以误报告终。所以我的问题是,当我想知道字符串是否不为空或未定义时,或者如果我想检查类型是否不是某事,然后基于此做某事,我总是会得到类似的结果

if(typeof system_obj.alpha == 'undefined'){/*ignore*/}else
{
  //code
}

我如何正确地做到这一点,而不必像我最终做的那样使用 if-else 逻辑

4

2 回答 2

1

使用system_obj.alpha === void 0它是检查变量是否未定义的最快方法,并且它是可靠的。这是比较。

http://jsperf.com/typeof-vs-undefined-check/3

于 2013-01-24T21:20:01.533 回答
1

只需执行以下操作:

if (typeof systemObj !== 'undefined') {
  ... do something
}

要测试对象是否真实(而不是未定义、空、假等),请执行以下操作:

if (systemObj) {
    ... do something (will throw error is object does not exist)
}

您的示例显示在上面的方式可以执行以下操作:

 if (systemObj.hasOwnProperty('alpha') && systemObj.alpha) {
     ... do something
 }

这将检查以确保 alpha 存在并且不是虚假的。

在问题范围之外,我建议以下内容:

  • 使用骆驼皮套。

  • 不要那样写你的 if 语句。

  • 查看http://addyosmani.com/blog/或类似资源,了解如何编写更好的 JavaScript。

于 2013-01-24T21:41:58.613 回答