找回密码
 立即注册
问题
我们经常在 JavaScript 代码中使用以下代码模式
  1. if (typeof(some_variable) != 'undefined' && some_variable != null)
  2. {
  3.     // Do something with some_variable
  4. }
复制代码

是否有一种不那么冗长的检查方法会产生相同的效果?

根据一些论坛和文献,简单地说以下应该具有相同的效果。
  1. if (some_variable)
  2. {
  3.     // Do something with some_variable
  4. }
复制代码

不幸的是,当 some_variable 未定义时,Firebug 在运行时将这样的语句评估为错误,并且第一条语句正好适合它。这只是萤火虫的(不想要的)行为,还是两种方式之间真的有什么区别?

回答
您必须区分不同的情况:

不明确的

类型
  1. if(typeof someUndeclaredVar == whatever) // works
  2. if(someUndeclaredVar) // throws error
复制代码

已声明但未初始化的变量是 undefined 。

  1. let foo;
  2. if (foo) //evaluates to false because foo === undefined
复制代码
  1. someExistingObj.someUndefProperty

  2. undefined

  3. false

  4. 0

  5. false

  6. if(obj.undefProp)

  7. value = obj.prop || defaultValue

  8. obj

  9. prop

  10. value

  11. defautValue

  12. in

  13. value = ('prop' in obj) ? obj.prop : defaultValue
复制代码






上一篇:将超时设置为 fs.copy 函数
下一篇:验证 node.js 实例是 dev 还是 production