2017-08-14 180 views
-1

所以我有这样的情况基本上错误,当Javascript'或'||在这种情况下使用运营商

var a = someUndefinedVariable.name || ""; 

在这种情况下,为什么“A”不等于空字符串??? 这个表达式抛出一个错误,所以我认为执行就停止了,Interpreter没有到达带有OR语句的部分。这样对吗? 但是,没有属性名称一切正常。 非常感谢您的关注。

+0

不可回答的问题。 –

+0

@MarcoSalerno,我理解了它。 –

+0

你猜对了,这是不同的 –

回答

3

您可能会检查someUndefinedVariable第一,以防止一个未定义的变量

var a = someUndefinedVariable && someUndefinedVariable.name || ""; 
+0

好的提示!谢谢! – Artdark92

6

由于someUndefinedVariable的性质的访问,为undefined,没有财产name,所以它崩溃。其替换为:

var a = (someUndefinedVariable && someUndefinedVariable.name) || ""; 
4

This expression throws an error so I think execution just stops and Interpreter does not reaching to the part with the OR statement. Is it right?

是。异常停止执行(除非你是catch他们)。

However, without property name everything works fine.

  1. 如果变量未声明,并尝试从中读取数据,那么你会得到一个异常:未捕获的ReferenceError:FOO没有被定义
  2. 如果声明了一个变量,并且具有undefined值,那么您可以自由访问它。这只是undefined
  3. 试图访问undefined值的属性会引发异常: 遗漏的类型错误:无法读取的不确定

你正在处理的案件2和3

+0

非常感谢您的回答。现在一切都很清楚! – Artdark92

1

你属性“栏”应该使用

var a = (someUndefinedVariable && someUndefinedVariable.name) || ""; 

因为您指的是未定义变量的属性,它会崩溃,而不是检查变量是否存在于h之前和

+0

不错的提示!谢谢! – Artdark92