关于在if条件句中判断一个值是否存在

一直有一个虽然基础但是理解不深的问题,if(!a){...代码块一...},为什么a值不存在不实执行代码块一,而是报错。 这样的话undefined不就只适合有定义但是没有赋值的变量了吗 ?

我做过这样一个小测试,var a;if(!a.b){...代码块一...}会报错; 而var a="x";if(!a.b){...代码块一...}会执行代码块一。 这个说明,如果a是一个object,那么就可以访问它的属性,即使它不存在。

阅读 4.9k
5 个回答

这其实是设计不合理的问题',不必太过纠结。使用严格模式就可以得到一个统一的解释:未声明的变量不够直接使用。可以避免很多歧义。

正如你最后那句话,var a;此时 a = undefined。

如果a没有声明过的话,就会报错,a is not defined
可以使用if(!window.a),这样即使a没有定义过也不会报错

都没定义,那肯定报错了。

因为a = undefined,所以undefined.b,肯定不到东西,所以报错,,而a = "x","x".b = undefined,相当于是false,!"x".b = true,所以会执行代码块一。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题