【问题标题】:Testing for null object using short-circuit logical operator使用短路逻辑运算符测试空对象
【发布时间】: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


【解决方案1】:

这个答案是Felix Kling的评论,我希望他将它作为自己的答案发布,以获得奖励的声誉


看看Logical Operators,在最顶部:

“逻辑运算符通常与布尔(逻辑)值一起使用;当它们使用时,它们返回一个布尔值。但是,&& 和 || 运算符实际上返回指定操作数之一的值,所以如果这些运算符是与非布尔值一起使用时,它们可能会返回非布尔值。”

【讨论】:

    猜你喜欢
    • 2012-02-04
    • 2013-06-02
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多