问题
我们经常在 JavaScript 代码中使用以下代码模式
- if (typeof(some_variable) != 'undefined' && some_variable != null)
- {
- // Do something with some_variable
- }
复制代码
是否有一种不那么冗长的检查方法会产生相同的效果?
根据一些论坛和文献,简单地说以下应该具有相同的效果。
- if (some_variable)
- {
- // Do something with some_variable
- }
复制代码
不幸的是,当 some_variable 未定义时,Firebug 在运行时将这样的语句评估为错误,并且第一条语句正好适合它。这只是萤火虫的(不想要的)行为,还是两种方式之间真的有什么区别?
回答
您必须区分不同的情况:
不明确的
类型
- if(typeof someUndeclaredVar == whatever) // works
- if(someUndeclaredVar) // throws error
复制代码
已声明但未初始化的变量是 undefined 。
- let foo;
- if (foo) //evaluates to false because foo === undefined
复制代码- someExistingObj.someUndefProperty
- undefined
- false
- 0
- false
- if(obj.undefProp)
- value = obj.prop || defaultValue
- obj
- prop
- value
- defautValue
- in
- value = ('prop' in obj) ? obj.prop : defaultValue
复制代码
|