Javascript'或'||时出错在这种情况下使用的运算符

时间:2017-08-14 08:55:58

标签: javascript

所以基本上我有这种情况

var a = someUndefinedVariable.name || "";

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

4 个答案:

答案 0 :(得分:6)

因为someUndefinedVariable undefinedname没有属性var a = (someUndefinedVariable && someUndefinedVariable.name) || ""; ,所以它会崩溃。替换为:

{{1}}

答案 1 :(得分:4)

  

这个表达式抛出一个错误,所以我认为执行只是停止,而Interpreter没有到达带有OR语句的部分。这样对吗?

是。异常会暂停执行(除非你catch)。

  

然而,没有属性名称一切正常。

  1. 如果未声明变量且您尝试从中读取变量,则会出现异常:未捕获的ReferenceError:foo未定义
  2. 如果声明了变量,并且具有undefined值,则可以自由访问它。它只是undefined
  3. 尝试访问undefined值的属性会引发异常: 未捕获的TypeError:无法读取未定义的属性“bar”
  4. 您正在处理案例2和案例。

答案 2 :(得分:3)

您可以先检查someUndefinedVariable,以防止访问未定义变量的属性

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

答案 3 :(得分:1)

你应该使用

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <action android:name="android.intent.action.EDIT" />
    <category android:name="android.intent.category.DEFAULT" />
    <data
        android:mimeType="text/plain"
        android:scheme="file"
        android:host="*" />
</intent-filter>

因为你指的是一个未定义变量的属性,它会崩溃,而是先检查变量是否存在