【发布时间】:2014-06-14 05:34:16
【问题描述】:
我正在阅读Mozilla Developer Network's page on Javascript,但对我看到的一行感到困惑。这是有问题的描述和行:
&& 和 ||运算符使用短路逻辑,这意味着他们是否会执行第二个操作数取决于第一个操作数。这对于在访问其属性之前检查空对象很有用:
var name = o && o.getName();
我在这里的困惑是,大概 sn-p 的目的是执行:
var name;
if (o){
name = o.getname();
}
但是,这里发生的情况似乎是 name 被分配了一个布尔值,并且该布尔值是“o 存在且其名称不为空”。换句话说,对我来说它看起来像:
var name = false;
if (o && o.getname()){
name = true;
}
谢谢!
【问题讨论】:
-
查看最顶部的Logical Operators:“逻辑运算符通常与布尔(逻辑)值一起使用;当它们使用时,它们返回一个布尔值。但是, && 和 || 运算符实际上返回指定操作数之一的值,因此如果这些运算符与非布尔值一起使用,它们可能返回非布尔值。”
-
简而言之,
&&返回它最左边的虚假操作数,或者如果所有这些都是真实的,则返回最后一个,||- 最左边的真实操作数,或者如果所有这些都是虚假的,则返回最后一个。 -
您的问题到底是什么?是的,sn-p 做了一些事情,但对你来说,它应该做其他事情。那么,问题是什么? 为什么?因为它是这样编译的...
-
@Karl-AndréGagnon 上面的描述没有说清楚,这就是我必须继续说的,所以我不确定它是否真的导致 name 成为布尔值或者是否存在是我不知道的 && 的一些行为。
-
@JoshLemer 好的,所以 Felix Kling 回答了这个问题,对吗?
标签: javascript variable-assignment logical-operators control-structure